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

Side by Side Diff: base/trace_event/heap_profiler_string_deduplicator_unittest.cc

Issue 2650863003: [tracing] Switch to new heap dump format. (Closed)
Patch Set: DCHECK for continuous mode Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/trace_event/heap_profiler_string_deduplicator.h"
6
7 #include <memory>
8 #include <string>
9
10 #include "base/memory/ptr_util.h"
11 #include "base/trace_event/trace_event_argument.h"
12 #include "base/values.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace base {
16 namespace trace_event {
17
18 namespace {
19
20 // Calls StringDeduplicator::ExportIncrementally() and returns ListValue
21 // with exported entries.
22 std::unique_ptr<ListValue> ExportEntriesIncrementally(
23 StringDeduplicator* dedup) {
24 TracedValue traced_value;
25 traced_value.BeginArray("");
26 dedup->ExportIncrementally(&traced_value);
27 traced_value.EndArray();
28
29 auto base_value = traced_value.ToBaseValue();
30 const DictionaryValue* dictionary;
31 const ListValue* entries;
32 if (!base_value->GetAsDictionary(&dictionary) ||
33 !dictionary->GetList("", &entries)) {
34 return nullptr;
35 }
36
37 return WrapUnique(entries->DeepCopy());
38 }
39
40 struct StringMapping {
41 const int id;
42 const char* const string;
43 };
44
45 std::unique_ptr<ListValue> ConvertMappingsToExportedEntries(
46 std::initializer_list<StringMapping> mappings) {
47 auto entries = MakeUnique<ListValue>();
48 for (const auto& mapping : mappings) {
49 auto entry = MakeUnique<DictionaryValue>();
50 entry->SetInteger("id", mapping.id);
51 entry->SetString("string", mapping.string);
52 entries->Append(std::move(entry));
53 }
54 return entries;
55 }
56
57 void ExpectIncrementalEntries(StringDeduplicator* dedup,
58 std::initializer_list<StringMapping> mappings) {
59 auto entries = ExportEntriesIncrementally(dedup);
60 ASSERT_TRUE(entries);
61
62 auto expected_entries = ConvertMappingsToExportedEntries(mappings);
63 ASSERT_TRUE(expected_entries->Equals(entries.get()))
64 << "expected_entries = " << *expected_entries << "entries = " << *entries;
65 }
66
67 } // namespace
68
69 TEST(StringDeduplicatorTest, ImplicitId0) {
70 StringDeduplicator dedup;
71
72 // NULL string is mapped to an implicitly added ID #0.
73 ExpectIncrementalEntries(&dedup, {{0, "[null]"}});
74 ASSERT_EQ(0, dedup.Insert(nullptr));
75
76 // Even though ID #0 is exported as "[null]", it's distinct from
77 // explicitly added "[null]" string.
78 ASSERT_EQ(1, dedup.Insert("[null]"));
79 ExpectIncrementalEntries(&dedup, {{1, "[null]"}});
80 }
81
82 TEST(StringDeduplicatorTest, Deduplication) {
83 StringDeduplicator dedup;
84
85 ASSERT_EQ(1, dedup.Insert("foo"));
86 ASSERT_EQ(2, dedup.Insert("bar"));
87 ASSERT_EQ(3, dedup.Insert("baz"));
88
89 // Inserting again should return the same IDs.
90 ASSERT_EQ(2, dedup.Insert("bar"));
91 ASSERT_EQ(1, dedup.Insert("foo"));
92 ASSERT_EQ(3, dedup.Insert("baz"));
93
94 // Deduplication works on string contents, not on pointers,
95 // so inserting copies should yield the same IDs.
96 ASSERT_EQ(2, dedup.Insert(std::string("bar")));
97 ASSERT_EQ(1, dedup.Insert(std::string("foo")));
98 }
99
100 TEST(StringDeduplicatorTest, IncrementalExport) {
101 StringDeduplicator dedup;
102
103 ASSERT_EQ(1, dedup.Insert("foo"));
104 ASSERT_EQ(2, dedup.Insert("bar"));
105
106 ExpectIncrementalEntries(&dedup, {{0, "[null]"}, {1, "foo"}, {2, "bar"}});
107
108 ASSERT_EQ(2, dedup.Insert("bar"));
109 ASSERT_EQ(3, dedup.Insert("baz"));
110
111 ExpectIncrementalEntries(&dedup, {{3, "baz"}});
112
113 ExpectIncrementalEntries(&dedup, {});
114 }
115
116 } // namespace trace_event
117 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698