CodeSourceMap now contains a small bytecode that describes changes to the token position and inlining stack as one moves through a function. This information is used by the disassembler to display inlining comments and by the profiler to properly blame ticks against source code.
Slightly shrinks the total size of code metadata; on dart2js compiling hello world, the final heap is
before 59.6MB total, 12.8MB List, 1.1MB CodeSourceMap
after 59.4MB total, 12.1MB List, 1.5MB CodeSourceMap
To be filtered and included in AOT code to expand inline frames in stack traces.
R=johnmccutchan@google.com
Review-Url: https://codereview.chromium.org/2670843006 .
The analyzer has a stricter patch parser than the VM. Patch files
cannot change signatures of patched members. Specifically, they cannot
change:
- the return type
- a parameter's name
- a parameter to an initializing formal
- an optional parameter's default value
BUG=
R=asiva@google.com
Review-Url: https://codereview.chromium.org/2612043002 .
Before, the VM's dart:typed_data was a complete replacement of the SDK's
dart:typed_data implementation instead of a patch. This is unlike all
the other SDK libraries. This difference requires special-casing for
dart:typed_data in tools that handle the SDK libraries (e.g., the
Analyzer's patching support, the GN build).
This change makes dart:typed_data back into a patch to the SDK's
implementation. It reintroduces a distinction between abstract
interface and concrete implementation classes, so there are more
classes.
BUG=
R=fschneider@google.com, vegorov@google.com
Committed: https://github.com/dart-lang/sdk/commit/a9b906d319c32525a0600c75c008c92753591d86
Review-Url: https://codereview.chromium.org/2571563005 .
Before, the VM's dart:typed_data was a complete replacement of the SDK's
dart:typed_data implementation instead of a patch. This is unlike all
the other SDK libraries. This difference requires special-casing for
dart:typed_data in tools that handle the SDK libraries (e.g., the
Analyzer's patching support, the GN build).
This change makes dart:typed_data back into a patch to the SDK's
implementation. It reintroduces a distinction between abstract
interface and concrete implementation classes, so there are more
classes.
BUG=
R=fschneider@google.com
Review-Url: https://codereview.chromium.org/2571563005 .
We have a racy read of the object header in the stack frame walker
called from the profiler (in this case the gc marker is running at
the same time).
It is appropriate to avoid this even though we think the access is
safe as the objects are in old space and never forwarded and only
the mark bits are manipulated while marking
BUG=
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org/2517473002 .
The call sequence is very similar to a classic IC call, except the guarded class and the target are loaded indirectly from the constant pool instead of as immediates. In the monomorphic case, we call directly to the expected target with a class check in the callee. In the unlinked, polymorphic and megamorphic cases, we call a stub; these case are now call-through instead of call-and-return.
Every code, except stubs involved in switchable calls, includes the class check sequence at the beginning. So we now distinguish between a checked and an unchecked entry point. Generated code except the switchable call continues to use the unchecked entry point.
PC offsets are calculated relative to the beginning of the instruction stream, rather than either entry point.
BUG=
R=fschneider@google.com
Review URL: https://codereview.chromium.org/2226893002 .
This is a cut of the work that Todd and I collaborated on in the reload branch.
In this CL, we've dropped the loader port hacks, in other words, on stack reloading in the standalone embedder does not work yet.
- [x] Support for hot reloading of isolate source code
- [x] Unit test harness and many tests
- [x] Service protocol and Observatory support
- [x] Product build does not include support for hot reloading.
R=rmacnak@google.com
Review URL: https://codereview.chromium.org/1965823002 .
Service:
- [x] Add "_profilerMode" to VM response. "VM" or "Dart" depending on --profile-vm flag.
- [x] Output a tree where VM tag are treated as executing "exit frame" functions when profiling Dart.
- [x] tick "exit frame" tag functions when profiling Dart.
Observatory:
- [x] don't include option for VM tags when profiling Dart.
- [x] default to no tags when profiling Dart.
- [x] indent the colored bar closer to the down arrow.
- [x] don't show percentages for user tag rows.
- [x] Update cpu profile table view to use virtual tree.
- [x] Update class allocation view to use virtual tree.
BUG=
R=rmacnak@google.com
Review URL: https://codereview.chromium.org/1851293005 .
This removes the additional indirection to the VM's implementation
for all the factory constructors.
Additionally, it removes one class per typed data list type, thus reducing
snapshot and generated code size.
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org/1790593002 .
- Add new getSourceReport kind 'Profile'.
- Add "profileTicks" to source ranges that have profile data.
- "profileTicks" is organized as three arrays: positions, inclusive ticks, and exclusive ticks. These arrays are indexed together.
- Keep source positions in profile sorted by token position value.
- Misc improvements to debug printing in profiler.
- Add unit test for profile getSourceReport.
R=turnidge@google.com
Review URL: https://codereview.chromium.org/1779333004 .
- Fix bug in inlined call token positios.
- Add ProfileFunctionSourcePosition for tracking source positions within functions.
- Keep a list of ProfileFunctionSourcePosition in each function.
- Add unit test helper functions.
- Add unoptimized unit tests that verify source positions in function profiles.
- Add optimized/inlined unit tests that verify source positions in function profiles.
R=srdjan@google.com
Review URL: https://codereview.chromium.org/1758653003 .
They were used as the class of closure instances and as the type class of
function types.
All closure instances now have class _Closure and function types are represented
by a new class FunctionType extending AbstractType.
Fix issue 24567 and add regression test.
R=asiva@google.com, rmacnak@google.com
Review URL: https://codereview.chromium.org/1584223006 .
- API breakage: Dart_IsolateBlocked, Dart_IsolateUnblocked -> Dart_ThreadDisableProfiling, Dart_ThreadEnableProfiling.
- Remove IsolateProfilerData.
- Move thread at blocking call count from isolate to thread.
- Always interrupt threads unless they are blocked.
- We can no longer count "idle" ticks.
- Only record sample if thread is the current mutator of an isolate.
- Refactor ThreadInterrupterCallback to ensure that Thread* is valid.
Threads are only ever sent signals if ThreadInterruptsEnabled is true. Which is controlled by two functions:
void DisableThreadInterrupts();
void EnableThreadInterrupts();
R=asiva@google.com, iposva@google.com
Review URL: https://codereview.chromium.org/1423473004 .
- API breakage: Dart_IsolateBlocked, Dart_IsolateUnblocked -> Dart_ThreadDisableProfiling, Dart_ThreadEnableProfiling.
- Remove IsolateProfilerData.
- Move thread at blocking call count from isolate to thread.
- Always interrupt threads unless they are blocked.
- We can no longer count "idle" ticks.
- Only record sample if thread is the current mutator of an isolate.
- Refactor ThreadInterrupterCallback to ensure that Thread* is valid.
Threads are only ever sent signals if ThreadInterruptsEnabled is true. Which is controlled by two functions:
void DisableThreadInterrupts();
void EnableThreadInterrupts();
R=asiva@google.com, iposva@google.com
Review URL: https://codereview.chromium.org/1412733008 .
deprecated isolate based API.)
- Update all code impacted by this change. E.g. DARTSCOPE
- TEST_CASE now passes the current thread as a parameter to the unit test.
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//1310463005 .
- Add continuation_index field to profiler sample.
- Add bit to tell if a sample is the head of a chain.
- Add bit to tell if a sample has a chained sample.
- Each sample holds 8 frames.
- Collect up to 8 frames (1 sample) by default.
- Refactor stack walker code to support chaining during stack walking.
- Add unit test collecting 20 stack frames.
R=asiva@google.com
Review URL: https://codereview.chromium.org//1270003002 .
- Context allocation unit test.
- Class allocation unit test.
- Adjust behaviour of RecordAllocation when we haven't exited Dart code and we aren't profiling the VM to match the sampler.
- Fix tests to ignore embedder samples by default
BUG=
Review URL: https://codereview.chromium.org//1307593003 .