| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 | 6 |
| 7 #include "vm/dart_api_impl.h" | 7 #include "vm/dart_api_impl.h" |
| 8 #include "vm/dart_api_state.h" | 8 #include "vm/dart_api_state.h" |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #include "vm/profiler.h" | 10 #include "vm/profiler.h" |
| (...skipping 1517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1528 EXPECT_EQ(50000, profile.sample_count()); | 1528 EXPECT_EQ(50000, profile.sample_count()); |
| 1529 ProfileTrieWalker walker(&profile); | 1529 ProfileTrieWalker walker(&profile); |
| 1530 // We have two code objects: mainA and B.boo. | 1530 // We have two code objects: mainA and B.boo. |
| 1531 walker.Reset(Profile::kExclusiveCode); | 1531 walker.Reset(Profile::kExclusiveCode); |
| 1532 EXPECT(walker.Down()); | 1532 EXPECT(walker.Down()); |
| 1533 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); | 1533 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); |
| 1534 EXPECT(walker.Down()); | 1534 EXPECT(walker.Down()); |
| 1535 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); | 1535 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); |
| 1536 EXPECT_EQ(50000, walker.CurrentExclusiveTicks()); | 1536 EXPECT_EQ(50000, walker.CurrentExclusiveTicks()); |
| 1537 EXPECT(walker.Down()); | 1537 EXPECT(walker.Down()); |
| 1538 EXPECT_STREQ("B.boo", walker.CurrentName()); | 1538 EXPECT_STREQ("*B.boo", walker.CurrentName()); |
| 1539 EXPECT_EQ(1, walker.SiblingCount()); | 1539 EXPECT_EQ(1, walker.SiblingCount()); |
| 1540 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); | 1540 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); |
| 1541 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); | 1541 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); |
| 1542 EXPECT(walker.Down()); | 1542 EXPECT(walker.Down()); |
| 1543 EXPECT_STREQ("mainA", walker.CurrentName()); | 1543 EXPECT_STREQ("mainA", walker.CurrentName()); |
| 1544 EXPECT_EQ(1, walker.SiblingCount()); | 1544 EXPECT_EQ(1, walker.SiblingCount()); |
| 1545 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); | 1545 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); |
| 1546 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); | 1546 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); |
| 1547 EXPECT_EQ(0, walker.CurrentExclusiveTicks()); | 1547 EXPECT_EQ(0, walker.CurrentExclusiveTicks()); |
| 1548 EXPECT(!walker.Down()); | 1548 EXPECT(!walker.Down()); |
| 1549 // We have two code objects: mainA and B.boo. | 1549 // We have two code objects: mainA and B.boo. |
| 1550 walker.Reset(Profile::kInclusiveCode); | 1550 walker.Reset(Profile::kInclusiveCode); |
| 1551 EXPECT(walker.Down()); | 1551 EXPECT(walker.Down()); |
| 1552 EXPECT_STREQ("mainA", walker.CurrentName()); | 1552 EXPECT_STREQ("mainA", walker.CurrentName()); |
| 1553 EXPECT_EQ(1, walker.SiblingCount()); | 1553 EXPECT_EQ(1, walker.SiblingCount()); |
| 1554 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); | 1554 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); |
| 1555 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); | 1555 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); |
| 1556 EXPECT_EQ(0, walker.CurrentExclusiveTicks()); | 1556 EXPECT_EQ(0, walker.CurrentExclusiveTicks()); |
| 1557 EXPECT(walker.Down()); | 1557 EXPECT(walker.Down()); |
| 1558 EXPECT_STREQ("B.boo", walker.CurrentName()); | 1558 EXPECT_STREQ("*B.boo", walker.CurrentName()); |
| 1559 EXPECT_EQ(1, walker.SiblingCount()); | 1559 EXPECT_EQ(1, walker.SiblingCount()); |
| 1560 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); | 1560 EXPECT_EQ(50000, walker.CurrentNodeTickCount()); |
| 1561 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); | 1561 EXPECT_EQ(50000, walker.CurrentInclusiveTicks()); |
| 1562 EXPECT(walker.Down()); | 1562 EXPECT(walker.Down()); |
| 1563 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); | 1563 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); |
| 1564 EXPECT_EQ(50000, walker.CurrentExclusiveTicks()); | 1564 EXPECT_EQ(50000, walker.CurrentExclusiveTicks()); |
| 1565 EXPECT(walker.Down()); | 1565 EXPECT(walker.Down()); |
| 1566 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); | 1566 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); |
| 1567 EXPECT(!walker.Down()); | 1567 EXPECT(!walker.Down()); |
| 1568 | 1568 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 ProfileTrieWalker walker(&profile); | 1648 ProfileTrieWalker walker(&profile); |
| 1649 // We have two code objects: mainA and B.boo. | 1649 // We have two code objects: mainA and B.boo. |
| 1650 walker.Reset(Profile::kExclusiveCode); | 1650 walker.Reset(Profile::kExclusiveCode); |
| 1651 EXPECT(walker.Down()); | 1651 EXPECT(walker.Down()); |
| 1652 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); | 1652 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); |
| 1653 EXPECT(walker.Down()); | 1653 EXPECT(walker.Down()); |
| 1654 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); | 1654 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); |
| 1655 EXPECT(walker.Down()); | 1655 EXPECT(walker.Down()); |
| 1656 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); | 1656 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); |
| 1657 EXPECT(walker.Down()); | 1657 EXPECT(walker.Down()); |
| 1658 EXPECT_STREQ("B.boo", walker.CurrentName()); | 1658 EXPECT_STREQ("*B.boo", walker.CurrentName()); |
| 1659 EXPECT(walker.Down()); | 1659 EXPECT(walker.Down()); |
| 1660 EXPECT_STREQ("[Optimized Code]", walker.CurrentName()); | 1660 EXPECT_STREQ("[Optimized Code]", walker.CurrentName()); |
| 1661 EXPECT(walker.Down()); | 1661 EXPECT(walker.Down()); |
| 1662 EXPECT_STREQ("mainA", walker.CurrentName()); | 1662 EXPECT_STREQ("mainA", walker.CurrentName()); |
| 1663 EXPECT(walker.Down()); | 1663 EXPECT(walker.Down()); |
| 1664 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); | 1664 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); |
| 1665 EXPECT(!walker.Down()); | 1665 EXPECT(!walker.Down()); |
| 1666 // We have two code objects: mainA and B.boo. | 1666 // We have two code objects: mainA and B.boo. |
| 1667 walker.Reset(Profile::kInclusiveCode); | 1667 walker.Reset(Profile::kInclusiveCode); |
| 1668 EXPECT(walker.Down()); | 1668 EXPECT(walker.Down()); |
| 1669 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); | 1669 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); |
| 1670 EXPECT(walker.Down()); | 1670 EXPECT(walker.Down()); |
| 1671 EXPECT_STREQ("mainA", walker.CurrentName()); | 1671 EXPECT_STREQ("mainA", walker.CurrentName()); |
| 1672 EXPECT(walker.Down()); | 1672 EXPECT(walker.Down()); |
| 1673 EXPECT_STREQ("[Optimized Code]", walker.CurrentName()); | 1673 EXPECT_STREQ("[Optimized Code]", walker.CurrentName()); |
| 1674 EXPECT(walker.Down()); | 1674 EXPECT(walker.Down()); |
| 1675 EXPECT_STREQ("B.boo", walker.CurrentName()); | 1675 EXPECT_STREQ("*B.boo", walker.CurrentName()); |
| 1676 EXPECT(walker.Down()); | 1676 EXPECT(walker.Down()); |
| 1677 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); | 1677 EXPECT_STREQ("[Unoptimized Code]", walker.CurrentName()); |
| 1678 EXPECT(walker.Down()); | 1678 EXPECT(walker.Down()); |
| 1679 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); | 1679 EXPECT_STREQ("[Stub] Allocate A", walker.CurrentName()); |
| 1680 EXPECT(walker.Down()); | 1680 EXPECT(walker.Down()); |
| 1681 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); | 1681 EXPECT_STREQ("DRT_AllocateObject", walker.CurrentName()); |
| 1682 EXPECT(!walker.Down()); | 1682 EXPECT(!walker.Down()); |
| 1683 | 1683 |
| 1684 // Inline expansion should show us the complete call chain: | 1684 // Inline expansion should show us the complete call chain: |
| 1685 // mainA -> B.boo -> B.foo -> B.choo. | 1685 // mainA -> B.boo -> B.foo -> B.choo. |
| (...skipping 1119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2805 EXPECT_SUBSTRING("\"positions\":[\"TempMove\",39]", js.ToCString()); | 2805 EXPECT_SUBSTRING("\"positions\":[\"TempMove\",39]", js.ToCString()); |
| 2806 // Verify exclusive ticks in main. | 2806 // Verify exclusive ticks in main. |
| 2807 EXPECT_SUBSTRING("\"exclusiveTicks\":[1,0]", js.ToCString()); | 2807 EXPECT_SUBSTRING("\"exclusiveTicks\":[1,0]", js.ToCString()); |
| 2808 // Verify inclusive ticks in main. | 2808 // Verify inclusive ticks in main. |
| 2809 EXPECT_SUBSTRING("\"inclusiveTicks\":[1,2]", js.ToCString()); | 2809 EXPECT_SUBSTRING("\"inclusiveTicks\":[1,2]", js.ToCString()); |
| 2810 } | 2810 } |
| 2811 | 2811 |
| 2812 #endif // !PRODUCT | 2812 #endif // !PRODUCT |
| 2813 | 2813 |
| 2814 } // namespace dart | 2814 } // namespace dart |
| OLD | NEW |