koda@google.com
c2da2d9830
Make ASAN/MSAN ignore Dart frames.
...
Frames initialized by generated code are unknown to ASAN/MSAN, so we must explicitly mark it as initialized.
For some (unknown) reason, this only caused failures on the build bot.
TBR=asiva@google.com
Review URL: https://codereview.chromium.org//915723002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43661 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-10 18:43:27 +00:00
johnmccutchan@google.com
420aa94c56
Split profiler.cc into profiler.cc and profiler_service.cc
...
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//864173008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43623 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-09 23:22:19 +00:00
turnidge@google.com
e65e6fab9d
Begin migrating the vm service from a rest-style interface to a json-rpc style interface.
...
BUG=
Review URL: https://codereview.chromium.org//823403004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43370 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-02 23:15:40 +00:00
johnmccutchan@google.com
bedcc03afb
Remove unsupported --profile-dir flag and related code
...
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//877143002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43198 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-27 18:31:41 +00:00
johnmccutchan@google.com
81ce3ffef4
Speedup profile generation for stress test benchmark by 176x
...
Processed 779753 frames
CodeTables: live=9604 dead=5345 tag=51
FixTopFrame took 158092 millis.
CodeRegionTableBuilder took 13616 millis.
CodeRegionExclusiveTrieBuilder took 283 millis.
CodeRegionTableCallersBuilder took 57 millis.
CodeTableStream took 5637 millis.
~176 seconds
--- Fix PageSpace::FindObject to fast path executable pages
Processed 648584 frames
CodeTables: live=9398 dead=4655 tag=45
FixTopFrame took 68401 millis.
CodeRegionTableBuilder took 6401 millis.
CodeRegionExclusiveTrieBuilder took 222 millis.
CodeRegionTableCallersBuilder took 45 millis.
CodeTableStream took 267 millis.
~74 seconds
--- Fix PageSpace::Contains to fast path executable pages
Processed 690756 frames
CodeTables: live=9329 dead=5310 tag=49
FixTopFrame took 234 millis.
CodeRegionTableBuilder took 173 millis.
CodeRegionExclusiveTrieBuilder took 265 millis.
CodeRegionTableCallersBuilder took 60 millis.
CodeTableStream took 331 millis.
~1 second
R=iposva@google.com
Review URL: https://codereview.chromium.org//839833003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42672 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-07 21:39:49 +00:00
koda@google.com
a1faa84c2a
Make all tests pass ASAN.
...
Unpoison additional locations touched by profiler's stack walking.
Use return value of Isolate::GetProfilerStackBounds.
Commands to build and test:
export CXX="third_party/clang/linux/bin/clang++ -fsanitize=address -fPIC"
gclient runhooks
./tools/build.py -m debug -a x64 runtime
ASAN_OPTIONS=handle_segv=0 python tools/test.py --report --time --mode=debug --arch=x64 --compiler=none --runtime=vm --failure-summary --write-debug-log --write-test-outcome-log --copy-coredumps --exclude-suite=pkg --checked
R=iposva@google.com
Review URL: https://codereview.chromium.org//813163010
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42635 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-06 15:44:26 +00:00
koda@google.com
08edbbd6b4
MemorySanitizer support.
...
Enables building (including generating snapshot) and running simple scripts under MemorySanitizer.
Not all tests pass yet.
R=asiva@google.com
Review URL: https://codereview.chromium.org//816123002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42561 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-23 01:07:58 +00:00
johnmccutchan@google.com
456bdc4ea3
Enable the profiler on the simulator
...
R=asiva@google.com
Review URL: https://codereview.chromium.org//718393005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41752 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-14 23:15:00 +00:00
zra@google.com
816bf5af2e
Fixes for the profiler on arm64.
...
On arm64, in Dart code, R18(SP) is the stack pointer.
In C++ code, R31(CSP) is the stack pointer.
The profiler must choose the right one when performing
its bounds checks.
This change also fixes a bug in the InvokeDartCode stub
on arm64 so that CSP is set to the Isolate's stack
limit immediately, rather than a bit later. When it was
set a bit later, if a profiler interrupt came in in the
interim, the stack would be smashed.
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//583683002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40502 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-19 16:25:16 +00:00
johnmccutchan@google.com
3c6822fde3
- Keep track of stack base whenever Dart code is invoked.
...
- Update stack limit based on stack base.
R=asiva@google.com , turnidge@google.com
Review URL: https://codereview.chromium.org//506933002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39613 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-27 18:28:47 +00:00
turnidge@google.com
4d5f3ba638
vmservice protocol cleanup
...
user_name -> name
name -> vmName
Also, vmName is now only provided when it differs from name.
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//487023003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39525 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-25 18:53:43 +00:00
iposva@google.com
14ecdbd66a
- Separate the thread implementation used in bin/ and vm/
...
to allow us to make VM specific changes.
R=asiva@google.com
Review URL: https://codereview.chromium.org//463993002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39172 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-12 23:19:53 +00:00
johnmccutchan@google.com
207752927d
Disable ProfilerNativeStackWalker on Win64
...
BUG=
Review URL: https://codereview.chromium.org//455873002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39041 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-08 16:50:04 +00:00
vegorov@google.com
26376a1e58
Don't try to read return address from the stack of another thread on Win64.
...
This is not safe unless we are inside the Dart code.
Remove incorrect code that was trying to guard against STATUS_GUARD_PAGE_VIOLATION by checking FP.
BUG=http://dartbug.com/20421
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//451033002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39035 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-08 13:43:08 +00:00
johnmccutchan@google.com
ae9b2a9dd5
Add build configuration variable 'c_frame_pointers' to control whether or not frame pointers are included and which stack walker the profiler uses.
...
BUG=
R=iposva@google.com
Review URL: https://codereview.chromium.org//414303004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38711 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-29 22:48:57 +00:00
johnmccutchan@google.com
6f0b2bb2a9
Profiler tweaks
...
* Rename Script tag to Dart tag.
* Respect ignore bit on samples.
* Mark samples collected with an exit frame.
* Don't give exclusive CPU ticks to top frame on samples collected from an exit frame (because CPU usage is in the native code we've called out to not the function waiting to return).
R=asiva@google.com
Review URL: https://codereview.chromium.org//418433002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38522 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-23 21:09:25 +00:00
iposva@google.com
28c8553cb6
- Fix a lot of warnings generated by -Wshorten-64-to-32
...
when compiling for ia32 on Mac.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//415513002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38499 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-23 14:10:13 +00:00
johnmccutchan@google.com
2abbaca938
Add Dart stack walker that relies on frame pointers.
...
* It is used only when we don't have a top exit frame and we have the script tag set.
* Steps across exit frames and only collects Dart frames.
R=asiva@google.com
Review URL: https://codereview.chromium.org//408663004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38475 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-22 21:08:22 +00:00
johnmccutchan@google.com
98a959ff35
Really fix the build
...
BUG=
Review URL: https://codereview.chromium.org//408493004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38412 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-18 21:11:45 +00:00
johnmccutchan@google.com
597caa1754
Fix build breakage introduced in r38409
...
BUG=
Review URL: https://codereview.chromium.org//403003003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38411 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-18 21:04:36 +00:00
johnmccutchan@google.com
86bf7bb898
Profiler cleanup
...
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//397163002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38409 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-18 20:55:24 +00:00
johnmccutchan@google.com
e7ddd5d047
Move some isolate state setup from C++ code to JumpToExceptionHandler stub (take 3).
...
- CL is the same as take 2, but, I now prohibit the profiler from walking the call stack when the isolate is executing the jump to exception handler.
R=asiva@google.com
Review URL: https://codereview.chromium.org//395233002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38300 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-16 18:03:17 +00:00
johnmccutchan@google.com
7366afd86e
Revert r38240
...
BUG=
Review URL: https://codereview.chromium.org//393103002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38257 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-15 20:48:20 +00:00
johnmccutchan@google.com
efc684e4a8
Move some isolate state setup from C++ code to JumpToExceptionHandler stub
...
This change means that the isolate's top exit frame info and vm tag will only be updated after setting the frame pointer.
This is step one in a series of changes to allow the profiler to walk the stack when there is no frame pointer.
R=asiva@google.com
Review URL: https://codereview.chromium.org//393693002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38240 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-15 16:39:19 +00:00
johnmccutchan@google.com
9812f8a581
- Enable top exit frame profiler mode by default
...
- Final Windows fixes for using StackFrameIterator from different thread.
R=asiva@google.com
Review URL: https://codereview.chromium.org//360373003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37918 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-01 22:21:43 +00:00
johnmccutchan@google.com
ef2adfc5c6
Allow StackFrameIterator to be used on a different thread than the isolate whose stack frames are being iterated over.
...
This is necessary to be able to use this in the profiler.
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//354063004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37886 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-01 17:38:13 +00:00
johnmccutchan@google.com
59a859c2e8
Switch to old stackwalker until Windows crashes are fixed
...
BUG=
Review URL: https://codereview.chromium.org//351363003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37769 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-26 22:47:47 +00:00
johnmccutchan@google.com
70e89dc996
Use Dart stack walker when we have an exit frame.
...
This makes the profiler more Dart developer friendly (but less VM developer friendly).
Also, fixes a bug where the top exit frame info would be invalid after an exception occurs.
The flag: --profile-vm allows for profiling of VM internals.
R=asiva@google.com
Review URL: https://codereview.chromium.org//341083002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37767 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-26 22:06:34 +00:00
johnmccutchan@google.com
c897df4e7b
Make size of sample variable based on the profile depth flag.
...
R=iposva@google.com
Review URL: https://codereview.chromium.org//345713006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37553 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-20 14:46:54 +00:00
zra@google.com
e3f564fb6c
Changes for running tests on arm64 hardware.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//311413002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37046 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-05 18:43:55 +00:00
johnmccutchan@google.com
01a2e6ae49
WakeUp thread interrupter when isolate is made current
...
BUG=
R=iposva@google.com
Review URL: https://codereview.chromium.org//302433007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36639 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-26 15:55:48 +00:00
johnmccutchan@google.com
b3f2fb14d0
Reduce CPU usage when no isolates need to be profiled (e.g. when an isolate calls readLineSync or sleep the isolate owns the thread but is blocked).
...
This CL does the following:
- Introduces two new API entry points: Dart_IsolateBlocked and Dart_IsolateUnblocked.
- The thread interrupter thread goes into a deep sleep if no isolates need to be profiled (not scheduled on a thread or are in a blocking call).
- When an isolate unblocks, the thread interrupter thread resumes regular interrupts.
- dart:io readLineSync and sleep mark that they are making a blocking call.
This fixes https://code.google.com/p/dart/issues/detail?id=18126 reducing CPU usage to 0% when waiting for stdin or sleeping.
R=ajohnsen@google.com , iposva@google.com
Review URL: https://codereview.chromium.org//297183003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36632 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-26 11:53:49 +00:00
ajohnsen@google.com
8e06e7c859
Guard against frames across pages, in the profiler.
...
On Windows, if a page is not touched yet by the stack's thread, the page may be a guard page.
BUG=
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//293133007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36623 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-26 09:12:46 +00:00
ajohnsen@google.com
02332b5539
Fix thread-interrupter shutdown on Windows.
...
This reworks the ThreadId on Windows to be the tid, and not an open HANDLE.
BUG=
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//294193003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36502 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-22 15:12:09 +00:00
johnmccutchan@google.com
6858b4d4af
Fix edge case where profiler would miss the caller of the top frame.
...
Some stubs (and intrinsics) do not push a frame onto the stack leaving
the frame pointer in the caller.
PC -> STUB
FP -> DART3 <-+
DART2 <-| <- TOP FRAME RETURN ADDRESS.
DART1 <-|
.....
In this case, traversing the linked stack frames will not collect a PC
inside DART3. The stack will incorrectly be: STUB, DART2, DART1.
In Dart code, after pushing the FP onto the stack, an IP in the current
function is pushed onto the stack as well. This stack slot is called
the PC marker. We can use the PC marker to insert DART3 into the stack
so that it will correctly be: STUB, DART3, DART2, DART1. Note the
inserted PC may not accurately reflect the true return address from STUB.
R=asiva@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//264933006
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35762 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-05 20:04:16 +00:00
turnidge@google.com
9243ffc4ff
Always use the same json for null in the vm service.
...
PrintToJSONStream -> PrintJSON.
ALSO:
Fix <em> tags in the Observatory.
BUG=
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//257053003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35532 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-29 18:10:02 +00:00
johnmccutchan@google.com
15eff079d7
Collect samples during isolate startup
...
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//250883017
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35522 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-29 14:17:31 +00:00
zra@google.com
37baacb116
Small fixes for Android.
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//254383003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35342 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-23 23:20:24 +00:00
johnmccutchan@google.com
1e72c0f6c4
Disable applyAuthorStyles
...
This allows us to remove the dependency on bootstrap.css (removal of bootstrap.css from third_party will happen in follow up CL).
As a side effect of this, the following changes have occurred:
- Removed Google Charts Table from allocation profile pane.
- Add a SortedTable view-model (used in allocation profile).
- Changes to CPU profile tree view.
- Consolidate string formatting utility functions.
There is some UI regression (font size is one size too small) that will have to be addressed in follow up CLs.
R=turnidge@google.com
Review URL: https://codereview.chromium.org//237683004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35266 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-22 16:01:14 +00:00
johnmccutchan@google.com
8f0056371d
Initial UserTag and dart:profiler library
...
R=asiva@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//230863005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34949 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-10 22:32:45 +00:00
johnmccutchan@google.com
ef666553a1
Add runtime and native entry tags
...
- Split runtime and native entry tags.
- Set runtime / native entry address as vm tag in stubs.
- Add reverse native entry resolver (pc to name) to public API (breaking change).
- Hookup reverse resolver for standalone VM (io + bootstrap + builtin natives).
- Runtime entries are registered with tags.
- Profiler queries for tag names via the reverse native entry resolver.
- Profiler outputs named entry tags as children under parent tag (runtime or native).
R=asiva@google.com
Review URL: https://codereview.chromium.org//227433004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34941 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-10 20:26:45 +00:00
johnmccutchan@google.com
182fcd0921
Add isolate tag-profile model and UI.
...
Distinction between a Dart Error and a ServiceError/ServiceException.
Better Observatory behaviour when a ServiceError/ServiceExceptions occurs.
Display isolate's sticky error.
R=turnidge@google.com
Review URL: https://codereview.chromium.org//205713004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34377 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-25 18:09:02 +00:00
johnmccutchan@google.com
6952f5ddfe
Use VM tag in profile and add stack trace trie
...
R=asiva@google.com , turnidge@google.com
Review URL: https://codereview.chromium.org//201213004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34064 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-18 21:20:41 +00:00
johnmccutchan@google.com
239c0d564c
Fix C++11 compilation error
...
BUG=
Review URL: https://codereview.chromium.org//197763011
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33666 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-13 21:18:27 +00:00
johnmccutchan@google.com
6ea46abd34
Create a shadow table to track CodeRegions of reused code address space.
...
R=asiva@google.com , turnidge@google.com
Review URL: https://codereview.chromium.org//197803004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33665 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-13 21:00:44 +00:00
johnmccutchan@google.com
6edd276df8
Switch Observatory to use only ServiceObject instances.
...
All fetched objects are upgraded to a ServiceObject.
ServiceObjectCache.
Uniform updating / refreshing.
Fix UTF8 string escaping in TextBuffer (should fix invalid character bug https://code.google.com/p/dart/issues/detail?id=16590 )
R=turnidge@google.com
Review URL: https://codereview.chromium.org//192443004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33541 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-11 17:48:09 +00:00
johnmccutchan@google.com
97fe225e63
Display sample count and refresh time.
...
Fix some uninitialized variables.
Don't send disassembly by default.
R=turnidge@google.com
Review URL: https://codereview.chromium.org//185563013
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33380 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-06 16:48:49 +00:00
johnmccutchan@google.com
e9e54f6af6
Cleanup native, collected, and stub code handling in profiler
...
R=iposva@google.com , turnidge@google.com
Review URL: https://codereview.chromium.org//182703003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33177 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-28 22:55:53 +00:00
johnmccutchan@google.com
36ae6bf453
Turn stack walking verification into a flag
...
BUG=
R=asiva@google.com
Review URL: https://codereview.chromium.org//183633002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33129 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-27 19:35:57 +00:00
johnmccutchan@google.com
34dc7adc64
Fix usage of heap_
...
BUG=
Review URL: https://codereview.chromium.org//183113005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33124 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-27 18:07:22 +00:00