Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1024)

Unified Diff: runtime/vm/profiler_test.cc

Issue 1210283003: Extend allocation profile testing (Closed) Base URL: git@github.com:dart-lang/sdk.git@profile_model_public
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/profiler_service.cc ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/profiler_test.cc
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 561bb69e4eec9c87ed7aa4d9809dba57e892ff51..e35d2e952d8d05cc0b5db6d5c29c3cb2483683e3 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -8,6 +8,7 @@
#include "vm/dart_api_state.h"
#include "vm/globals.h"
#include "vm/profiler.h"
+#include "vm/profiler_service.h"
#include "vm/unit_test.h"
namespace dart {
@@ -108,15 +109,35 @@ static RawClass* GetClass(const Library& lib, const char* name) {
}
+class AllocationFilter : public SampleFilter {
+ public:
+ explicit AllocationFilter(Isolate* isolate, intptr_t cid)
+ : SampleFilter(isolate),
+ cid_(cid) {
+ }
+
+ bool FilterSample(Sample* sample) {
+ return sample->is_allocation_sample() && (sample->allocation_cid() == cid_);
+ }
+
+ private:
+ intptr_t cid_;
+};
+
+
TEST_CASE(Profiler_TrivialRecordAllocation) {
const char* kScript =
"class A {\n"
" var a;\n"
" var b;\n"
"}\n"
+ "class B {\n"
+ " static boo() {\n"
+ " return new A();\n"
+ " }\n"
+ "}\n"
"main() {\n"
- " var z = new A();\n"
- " return z;\n"
+ " return B.boo();\n"
"}\n";
Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
@@ -130,6 +151,55 @@ TEST_CASE(Profiler_TrivialRecordAllocation) {
Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
EXPECT_VALID(result);
+
+
+ {
+ Isolate* isolate = Isolate::Current();
+ StackZone zone(isolate);
+ HANDLESCOPE(isolate);
+ Profile profile(isolate);
+ AllocationFilter filter(isolate, class_a.id());
+ profile.Build(&filter, Profile::kNoTags);
+ // We should have 1 allocation sample.
+ EXPECT_EQ(1, profile.sample_count());
+ ProfileTrieWalker walker(&profile);
+
+ // Exclusive code: B.boo -> main.
+ walker.Reset(Profile::kExclusiveCode);
+ // Move down from the root.
+ EXPECT(walker.Down());
+ EXPECT_STREQ("B.boo", walker.CurrentName());
+ EXPECT(walker.Down());
+ EXPECT_STREQ("main", walker.CurrentName());
+ EXPECT(!walker.Down());
+
+ // Inclusive code: main -> B.boo.
+ walker.Reset(Profile::kInclusiveCode);
+ // Move down from the root.
+ EXPECT(walker.Down());
+ EXPECT_STREQ("main", walker.CurrentName());
+ EXPECT(walker.Down());
+ EXPECT_STREQ("B.boo", walker.CurrentName());
+ EXPECT(!walker.Down());
+
+ // Exclusive function: B.boo -> main.
+ walker.Reset(Profile::kExclusiveFunction);
+ // Move down from the root.
+ EXPECT(walker.Down());
+ EXPECT_STREQ("B.boo", walker.CurrentName());
+ EXPECT(walker.Down());
+ EXPECT_STREQ("main", walker.CurrentName());
+ EXPECT(!walker.Down());
+
+ // Inclusive function: main -> B.boo.
+ walker.Reset(Profile::kInclusiveFunction);
+ // Move down from the root.
+ EXPECT(walker.Down());
+ EXPECT_STREQ("main", walker.CurrentName());
+ EXPECT(walker.Down());
+ EXPECT_STREQ("B.boo", walker.CurrentName());
+ EXPECT(!walker.Down());
+ }
}
} // namespace dart
« no previous file with comments | « runtime/vm/profiler_service.cc ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698