aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
Commit message (Collapse)AuthorAge
* Add experimental option to do add local cpu usage values to the JSON profile.Gravatar twerth2018-08-14
| | | | | RELNOTES: None PiperOrigin-RevId: 208646319
* Explicitly cast ByteBuffer in clear() call to Buffer.Gravatar Tobias Werth2018-08-14
| | | | | | | | | | | | | This works around the following error: java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer; at com.google.devtools.build.lib.profiler.Profiler$BinaryFormatWriter.run(Profiler.java:949) at java.lang.Thread.run(Thread.java:748) JDK 9 introduced an overloaded methods with covariant return type. Closes #5886. PiperOrigin-RevId: 208642556
* Add critical path as fake thread 0 to the JSON profile.Gravatar twerth2018-08-10
| | | | | RELNOTES: None PiperOrigin-RevId: 208195833
* Get newlines back. After the switch to using a JsonWriter, the json profileGravatar Googler2018-07-31
| | | | | | | | | | | | | | | | | | | output was written all in one line. However, it is really convenient to be able to grep and count over the file (or generally be able to open it in an editor). This change is a bit hacky as just using setIndent makes the file completely expanded with one key-value pair per line, which is also not ideal. With this change, the format is: [ { <entry> }, { <entry> }, ... { <entry> } ] RELNOTES: None PiperOrigin-RevId: 206758496
* Use JsonWriter to ensure correct escaping of valuesGravatar ulfjack2018-07-31
| | | | PiperOrigin-RevId: 206729076
* Add an option to compress the JSON trace profile.Gravatar twerth2018-07-27
| | | | | | | chrome://tracing is able to load gzipped profiles out of the box. RELNOTES: None PiperOrigin-RevId: 206308018
* Reduce the set of profiler events for the json profileGravatar ulfjack2018-07-26
| | | | | | | This significantly reduces the size of the resulting profiles. Do we need the events that I remove? What do we do with the data? Who knows? PiperOrigin-RevId: 206153368
* Add the thread name as metadata to the Json profileGravatar ulfjack2018-07-25
| | | | PiperOrigin-RevId: 205985818
* Bazel server, tools: ensure Writers are closedGravatar laszlocsomor2018-07-10
| | | | | | | | | | | | | | | | | | | | Follow-up to commit 09d20311d982606093ed881d779bb05a5ee70ed3. Use try-with-resources to ensure Writer objects are closed eagerly. Eagerly closing Writers avoids hanging on to file handles until the garbage collector finalizes the object, meaning Bazel on Windows (and other processes) can delete or mutate these files. Hopefully this avoids intermittent file deletion errors that sometimes occur on Windows. See https://github.com/bazelbuild/bazel/issues/5512 RELNOTES: none PiperOrigin-RevId: 203934471
* Improve logging for parsing skylark files.Gravatar twerth2018-07-09
| | | | | | | Also add preconditions check. RELNOTES: None. PiperOrigin-RevId: 203731929
* Add category to JSON profile to distinguish between different events for the ↵Gravatar twerth2018-07-03
| | | | | | | same actions. RELNOTES: None PiperOrigin-RevId: 203120069
* Set the start time of binary and JSON profiles to zero correctly.Gravatar lberki2018-07-02
| | | | | | | Also correct for buggy profiles written previously. RELNOTES: None. PiperOrigin-RevId: 202920255
* Add a convenience method to ProfilerGravatar ulfjack2018-06-14
| | | | | | This reduces our reliance on ProfilerTask. PiperOrigin-RevId: 200538769
* Add support for the Json trace file formatGravatar ulfjack2018-06-12
| | | | | | | | | | | | | | | | | Add a --experimental_generate_json_trace_profile option that puts a file into the output base (or uses --profile if set). There are still a lot of problems with this. - unexplained holes - way too many threads - nonsensical event titles - too many detail events, too little overview - it may also cause unnecessary load - it silently overwrites the existing file on subsequent invocations The format is documented here: goo.gl/oMZPLh PiperOrigin-RevId: 200259431
* Refactor profilerGravatar ulfjack2018-06-12
| | | | | | | | | | | | | | | | | | | | | | | | | | - move the save method to an inner class - don't use a timer, use a blocking queue instead - add a format enum (in anticipation of adding a json output format) - update the test to use an in memory buffer, and avoid FoundationTestCase Compared to the original https://github.com/bazelbuild/bazel/commit/15b8c259db111012b4642287172cb4d1d82151f3, it contains these changes: - Make it so we don't create a queue if we are not going to write any data! The queue is now owned by the writer, and if there is no writer, there is no queue. This was causing a memory regression because slowest task profiling is enabled by default, in which case the profiler is started with no output file. In that case, there's no thread that is emptying the queue, but the queue was still created by default. - add additional tests for slowest task and histogram handling; these also provide coverage for the case where the profiler is started without an output stream - move all the writer thread handling into the inner class - make writer access thread-safe - add a bunch of documentation PiperOrigin-RevId: 200212978
* Automated rollback of commit 15b8c259db111012b4642287172cb4d1d82151f3.Gravatar jmmv2018-06-11
| | | | | | | | *** Reason for rollback *** Breaks internal performance tests. PiperOrigin-RevId: 200103033
* Refactor profilerGravatar ulfjack2018-06-11
| | | | | | | | | - move the save method to an inner class - don't use a timer, use a blocking queue instead - add a format enum (in anticipation of adding a json output format) - update the test to use an in memory buffer, and avoid FoundationTestCase PiperOrigin-RevId: 200065404
* Add AutoProfiler-like API to ProfilerGravatar ulfjack2018-06-11
| | | | | | - migrate all startTask/completeTask pairs to the new API PiperOrigin-RevId: 200038703
* Clean up Profiler a bitGravatar ulfjack2018-06-08
| | | | PiperOrigin-RevId: 199849102
* Clean up code that directly imports nested classes like Builder, Entry, etc.Gravatar jcater2018-05-01
| | | | PiperOrigin-RevId: 195040539
* Fix profiler slow task limitingGravatar michajlo2018-04-24
| | | | | | | | Looks like a typo resulted in getSlowestTasks accumulating way more than it should have and we were missing the test coverage to catch it. RELNOTES: None PiperOrigin-RevId: 194169355
* Change profiling to only accept strings for its "description" argument. ↵Gravatar janakr2018-04-01
| | | | | | Profiling can hold onto objects for the duration of the build, and some of those objects may be temporary that should not be persisted. In particular, UnixGlob and its inner classes should not outlive loading and analysis. For the most part, care was taken in this CL to only use strings that required no additional construction, mainly to minimize garbage (retaining references to newly created strings is not as great a concern since only the strings corresponding to the slowest K tasks are retained, for some relatively small values of K). Action descriptions for actually executing actions are eagerly expanded because that work is minimal compared to the work of actually executing an action. PiperOrigin-RevId: 191251488
* Introduce an Extrema aggregator.Gravatar nharmata2018-02-28
| | | | | RELNOTES: None PiperOrigin-RevId: 187370833
* Add functionality to MemoryProfiler to do multiple garbage collections at ↵Gravatar janakr2018-02-28
| | | | | | the end of the build in an effort to get an accurate measurement of used memory. PiperOrigin-RevId: 187337487
* Accept Durations in the CriticalPathComponent and Profiler.Gravatar ccalvarin2018-02-22
| | | | | RELNOTES: None. PiperOrigin-RevId: 186658512
* Replace all usages of Blaze's Preconditions class with guava.Gravatar tomlu2017-11-09
| | | | | | | | Blaze had its own class to avoid GC from varargs array creation for the precondition happy path. Guava now (mostly) implements these, making it unnecessary to maintain our own. This change was almost entirely automated by search-and-replace. A few BUILD files needed fixing up since I removed an export of preconditions from lib:util, which was all done by add_deps. There was one incorrect usage of Preconditions that was caught by error prone (which checks Guava's version of Preconditions) that I had to change manually. PiperOrigin-RevId: 175033526
* More BUILD file refactorings.Gravatar philwo2017-09-06
| | | | | | | | | Split collect, concurrent, vfs, windows into package-level BUILD files. Move clock classes out of "util", into their own Java package. Move CompactHashSet into its own Java package to break a dependency cycle. Give nestedset and inmemoryfs their own package-level BUILD files. PiperOrigin-RevId: 167702127
* Rename all logger instances to "logger" (instead "LOG" or "log").Gravatar lberki2017-09-05
| | | | | RELNOTES: None. PiperOrigin-RevId: 167505493
* Split the cycle between vfs and profiler.Gravatar philwo2017-08-31
| | | | | | | | | | - Move ProfilerInfo into a subpackage (it's not necessary for profiling, just for analyzing a profile). - Make some fields in Profiler public for ProfileInfo. - Mark Profiler as ThreadSafe; there's no cyclic dependency here. This is based on ulfjack's microbazel patch series: https://github.com/ulfjack/bazel/commit/44553fcac0fc876784d8f48c2e577d8c999712de PiperOrigin-RevId: 167121952
* Add desired type of Profiler action to error message on crash. Also use ↵Gravatar Janak Ramakrishnan2017-01-25
| | | | | | | | Preconditions check because stringification is lazy. -- PiperOrigin-RevId: 145560352 MOS_MIGRATED_REVID=145560352
* Tolerate null variable values in Profiler. This can happen when the build ↵Gravatar Janak Ramakrishnan2016-06-15
| | | | | | | finishes, which calls #clear (via #stop via BlazeRuntime#afterCommand), concurrently with an OOM or other asynchronous crash which invokes CommandCompleteEvent subscribers, which may try to write profiling data. -- MOS_MIGRATED_REVID=124853610
* Use Bazel Preconditions variant which avoids varargs array creationGravatar Mark Schaller2015-12-10
| | | | | | | Reduces garbage. -- MOS_MIGRATED_REVID=109914243
* Record histogram and other statistics for the ProfileTask objects. In case ↵Gravatar Miguel Alcon Pinto2015-11-19
| | | | | | | of recording VFS_ stats we try to catalog the access base on the path type. -- MOS_MIGRATED_REVID=108238357
* Rationalize copyright headersGravatar Damien Martin-Guillerez2015-09-25
| | | | | | | | | | | The headers were modified with `find . -type f -exec 'sed' '-Ei' 's|Copyright 201([45]) Google|Copyright 201\1 The Bazel Authors|' '{}' ';'` And manual edit for not Google owned copyright. Because of the nature of ijar, I did not modified the header of file owned by Alan Donovan. The list of authors were extracted from the git log. It is missing older Google contributors that can be added on-demand. -- MOS_MIGRATED_REVID=103938715
* Some cleanup changes.Gravatar Ulf Adams2015-03-05
| | | | | -- MOS_MIGRATED_REVID=87821306
* Update from Google.Gravatar Han-Wen Nienhuys2015-02-25
-- MOE_MIGRATED_REVID=85702957