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

Side by Side Diff: services/resource_coordinator/coordination_unit/coordination_unit_graph_observer_unittest.cc

Issue 2942403002: [GRC] Coordination Unit Graph Observer (Closed)
Patch Set: Rebase Created 3 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 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 <string>
6 #include <utility>
7
8 #include "base/memory/ptr_util.h"
9 #include "base/process/process_handle.h"
10 #include "base/run_loop.h"
11 #include "services/resource_coordinator/coordination_unit/coordination_unit_fact ory.h"
12 #include "services/resource_coordinator/coordination_unit/coordination_unit_grap h_observer.h"
13 #include "services/resource_coordinator/coordination_unit/coordination_unit_impl .h"
14 #include "services/resource_coordinator/coordination_unit/coordination_unit_impl _unittest_util.h"
15 #include "services/resource_coordinator/coordination_unit/coordination_unit_mana ger.h"
16 #include "services/resource_coordinator/public/cpp/coordination_unit_id.h"
17 #include "services/resource_coordinator/public/cpp/coordination_unit_types.h"
18 #include "services/resource_coordinator/public/interfaces/coordination_unit.mojo m.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 namespace resource_coordinator {
22
23 namespace {
24
25 class CoordinationUnitGraphObserverTest : public CoordinationUnitImplTestBase {
26 };
27
28 class TestCoordinationUnitGraphObserver : public CoordinationUnitGraphObserver {
29 public:
30 TestCoordinationUnitGraphObserver()
31 : on_child_added_count_(0u),
32 on_parent_added_count_(0u),
33 on_coordination_unit_created_count_(0u),
34 on_property_changed_count_(0u),
35 on_child_removed_count_(0u),
36 on_parent_removed_count_(0u),
37 on_coordination_unit_will_be_destroyed_count_(0u) {}
38
39 size_t on_child_added_count() { return on_child_added_count_; }
40 size_t on_parent_added_count() { return on_parent_added_count_; }
41 size_t on_coordination_unit_created_count() {
42 return on_coordination_unit_created_count_;
43 }
44 size_t on_property_changed_count() { return on_property_changed_count_; }
45 size_t on_child_removed_count() { return on_child_removed_count_; }
46 size_t on_parent_removed_count() { return on_parent_removed_count_; }
47 size_t on_coordination_unit_will_be_destroyed_count() {
48 return on_coordination_unit_will_be_destroyed_count_;
49 }
50
51 // Overridden from CoordinationUnitGraphObserver.
52 bool ShouldObserve(const CoordinationUnitImpl* coordination_unit) override {
53 return coordination_unit->id().type == CoordinationUnitType::kFrame;
54 }
55 void OnCoordinationUnitCreated(
56 const CoordinationUnitImpl* coordination_unit) override {
57 ++on_coordination_unit_created_count_;
58 }
59 void OnChildAdded(
60 const CoordinationUnitImpl* coordination_unit,
61 const CoordinationUnitImpl* child_coordination_unit) override {
62 ++on_child_added_count_;
63 }
64 void OnParentAdded(
65 const CoordinationUnitImpl* coordination_unit,
66 const CoordinationUnitImpl* parent_coordination_unit) override {
67 ++on_parent_added_count_;
68 }
69 void OnPropertyChanged(const CoordinationUnitImpl* coordination_unit,
70 mojom::PropertyType property) override {
71 ++on_property_changed_count_;
72 }
73 void OnChildRemoved(
74 const CoordinationUnitImpl* coordination_unit,
75 const CoordinationUnitImpl* former_child_coordination_unit) override {
76 ++on_child_removed_count_;
77 }
78 void OnParentRemoved(
79 const CoordinationUnitImpl* coordination_unit,
80 const CoordinationUnitImpl* former_parent_coordination_unit) override {
81 ++on_parent_removed_count_;
82 }
83 void OnCoordinationUnitWillBeDestroyed(
84 const CoordinationUnitImpl* coordination_unit) override {
85 ++on_coordination_unit_will_be_destroyed_count_;
86 }
87
88 private:
89 size_t on_child_added_count_;
90 size_t on_parent_added_count_;
91 size_t on_coordination_unit_created_count_;
92 size_t on_property_changed_count_;
93 size_t on_child_removed_count_;
94 size_t on_parent_removed_count_;
95 size_t on_coordination_unit_will_be_destroyed_count_;
96 };
97
98 } // namespace
99
100 TEST_F(CoordinationUnitGraphObserverTest, CallbacksInvokedNoFilters) {
Zhen Wang 2017/06/21 03:48:36 nit: CallbacksInvokedNoFilters/CallbacksInvoked T
101 EXPECT_TRUE(coordination_unit_manager().observers_for_testing().empty());
102 coordination_unit_manager().RegisterObserver(
103 base::MakeUnique<TestCoordinationUnitGraphObserver>());
104 EXPECT_EQ(1u, coordination_unit_manager().observers_for_testing().size());
105
106 TestCoordinationUnitGraphObserver* observer =
107 static_cast<TestCoordinationUnitGraphObserver*>(
108 coordination_unit_manager().observers_for_testing()[0].get());
109
110 CoordinationUnitID process_cu_id(CoordinationUnitType::kProcess,
111 std::string());
112 CoordinationUnitID root_frame_cu_id(CoordinationUnitType::kFrame,
113 std::string());
114 CoordinationUnitID frame_cu_id(CoordinationUnitType::kFrame, std::string());
115
116 std::unique_ptr<CoordinationUnitImpl> process_coordination_unit =
117 coordination_unit_factory::CreateCoordinationUnit(
118 process_cu_id, service_context_ref_factory()->CreateRef());
119 std::unique_ptr<CoordinationUnitImpl> root_frame_coordination_unit =
120 coordination_unit_factory::CreateCoordinationUnit(
121 root_frame_cu_id, service_context_ref_factory()->CreateRef());
122 std::unique_ptr<CoordinationUnitImpl> frame_coordination_unit =
123 coordination_unit_factory::CreateCoordinationUnit(
124 frame_cu_id, service_context_ref_factory()->CreateRef());
125
126 coordination_unit_manager().OnCoordinationUnitCreated(
127 process_coordination_unit.get());
128 coordination_unit_manager().OnCoordinationUnitCreated(
129 root_frame_coordination_unit.get());
130 coordination_unit_manager().OnCoordinationUnitCreated(
131 frame_coordination_unit.get());
132 EXPECT_EQ(2u, observer->on_coordination_unit_created_count());
133
134 // The registered observer will only observe the events that happen to
135 // |root_frame_coordination_unit| and |frame_coordination_unit| because
136 // they are CoordinationUnitType::kFrame.
137 // OnAddParent will called for |root_frame_coordination_unit|.
138 process_coordination_unit->AddChild(root_frame_coordination_unit->id());
139 // OnAddParent will called for |frame_coordination_unit|.
140 process_coordination_unit->AddChild(frame_coordination_unit->id());
141 // OnAddChild will called for |root_frame_coordination_unit| and
142 // OnAddParent will called for |frame_coordination_unit|.
143 root_frame_coordination_unit->AddChild(frame_coordination_unit->id());
144 EXPECT_EQ(1u, observer->on_child_added_count());
145 EXPECT_EQ(3u, observer->on_parent_added_count());
146
147 // The registered observer will only observe the events that happen to
148 // |root_frame_coordination_unit| and |frame_coordination_unit| because
149 // they are CoordinationUnitType::kFrame.
150 // OnRemoveParent will called for |root_frame_coordination_unit|.
151 process_coordination_unit->RemoveChild(root_frame_coordination_unit->id());
152 // OnRemoveParent will called for |frame_coordination_unit|.
153 process_coordination_unit->RemoveChild(frame_coordination_unit->id());
154 // OnRemoveChild will called for |root_frame_coordination_unit| and
155 // OnRemoveParent will called for |frame_coordination_unit|.
156 root_frame_coordination_unit->RemoveChild(frame_coordination_unit->id());
157 EXPECT_EQ(1u, observer->on_child_removed_count());
158 EXPECT_EQ(3u, observer->on_parent_removed_count());
159
160 // The registered observer will only observe the events that happen to
161 // |root_frame_coordination_unit| and |frame_coordination_unit| because
162 // they are CoordinationUnitType::kFrame, so OnPropertyChanged
163 // will only be called for |root_frame_coordination_unit|.
164 root_frame_coordination_unit->SetProperty(mojom::PropertyType::kTest,
165 base::Value(42));
166 process_coordination_unit->SetProperty(mojom::PropertyType::kTest,
167 base::Value(42));
168 EXPECT_EQ(1u, observer->on_property_changed_count());
169
170 coordination_unit_manager().OnCoordinationUnitWillBeDestroyed(
171 process_coordination_unit.get());
172 coordination_unit_manager().OnCoordinationUnitWillBeDestroyed(
173 root_frame_coordination_unit.get());
174 coordination_unit_manager().OnCoordinationUnitWillBeDestroyed(
175 frame_coordination_unit.get());
176 EXPECT_EQ(2u, observer->on_coordination_unit_will_be_destroyed_count());
177 }
178
179 } // namespace resource_coordinator
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698