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

Side by Side Diff: blimp/client/feature/compositor/blimp_compositor_manager.cc

Issue 2274323002: Expose Blimp dependencies to the embedder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@khushal_baseline_1
Patch Set: Addressed Khushal's initial comments Created 4 years, 3 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "blimp/client/feature/compositor/blimp_compositor_manager.h" 5 #include "blimp/client/feature/compositor/blimp_compositor_manager.h"
6 6
7 #include "base/lazy_instance.h"
8 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
9 #include "blimp/client/core/compositor/blob_image_serialization_processor.h" 8 #include "blimp/client/core/compositor/blimp_compositor_dependencies.h"
10 #include "blimp/client/feature/compositor/blimp_gpu_memory_buffer_manager.h"
11 #include "blimp/client/feature/compositor/blimp_layer_tree_settings.h"
12 #include "blimp/common/compositor/blimp_task_graph_runner.h"
13 #include "cc/proto/compositor_message.pb.h" 9 #include "cc/proto/compositor_message.pb.h"
14 10
15 namespace blimp { 11 namespace blimp {
16 namespace client { 12 namespace client {
17 13
18 namespace { 14 namespace {
19 base::LazyInstance<blimp::BlimpTaskGraphRunner> g_task_graph_runner =
20 LAZY_INSTANCE_INITIALIZER;
21
22 const int kDummyTabId = 0; 15 const int kDummyTabId = 0;
23 } // namespace 16 } // namespace
24 17
25 BlimpCompositorManager::BlimpCompositorManager( 18 BlimpCompositorManager::BlimpCompositorManager(
26 RenderWidgetFeature* render_widget_feature, 19 RenderWidgetFeature* render_widget_feature,
27 cc::SurfaceManager* surface_manager, 20 BlimpCompositorDependencies* compositor_dependencies)
28 BlimpGpuMemoryBufferManager* gpu_memory_buffer_manager,
29 SurfaceIdAllocationCallback callback)
30 : render_widget_feature_(render_widget_feature), 21 : render_widget_feature_(render_widget_feature),
31 surface_manager_(surface_manager),
32 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
33 surface_id_allocation_callback_(callback),
34 visible_(false), 22 visible_(false),
35 layer_(cc::Layer::Create()), 23 layer_(cc::Layer::Create()),
36 active_compositor_(nullptr) { 24 active_compositor_(nullptr),
25 compositor_dependencies_(compositor_dependencies) {
37 DCHECK(render_widget_feature_); 26 DCHECK(render_widget_feature_);
38 DCHECK(surface_manager_); 27 DCHECK(compositor_dependencies_);
39 DCHECK(gpu_memory_buffer_manager_);
40 DCHECK(!surface_id_allocation_callback_.is_null());
41 28
42 render_widget_feature_->SetDelegate(kDummyTabId, this); 29 render_widget_feature_->SetDelegate(kDummyTabId, this);
43 } 30 }
44 31
45 BlimpCompositorManager::~BlimpCompositorManager() { 32 BlimpCompositorManager::~BlimpCompositorManager() {
46 render_widget_feature_->RemoveDelegate(kDummyTabId); 33 render_widget_feature_->RemoveDelegate(kDummyTabId);
47 if (compositor_thread_)
48 compositor_thread_->Stop();
49 } 34 }
50 35
51 void BlimpCompositorManager::SetVisible(bool visible) { 36 void BlimpCompositorManager::SetVisible(bool visible) {
52 visible_ = visible; 37 visible_ = visible;
53 if (active_compositor_) 38 if (active_compositor_)
54 active_compositor_->SetVisible(visible_); 39 active_compositor_->SetVisible(visible_);
55 } 40 }
56 41
57 bool BlimpCompositorManager::OnTouchEvent(const ui::MotionEvent& motion_event) { 42 bool BlimpCompositorManager::OnTouchEvent(const ui::MotionEvent& motion_event) {
58 if (active_compositor_) 43 if (active_compositor_)
59 return active_compositor_->OnTouchEvent(motion_event); 44 return active_compositor_->OnTouchEvent(motion_event);
60 return false; 45 return false;
61 } 46 }
62 47
63 void BlimpCompositorManager::GenerateLayerTreeSettings(
64 cc::LayerTreeSettings* settings) {
65 PopulateCommonLayerTreeSettings(settings);
66 }
67
68 std::unique_ptr<BlimpCompositor> BlimpCompositorManager::CreateBlimpCompositor( 48 std::unique_ptr<BlimpCompositor> BlimpCompositorManager::CreateBlimpCompositor(
69 int render_widget_id, 49 int render_widget_id,
70 cc::SurfaceManager* surface_manager, 50 BlimpCompositorDependencies* compositor_dependencies,
71 uint32_t surface_client_id,
72 BlimpCompositorClient* client) { 51 BlimpCompositorClient* client) {
73 return base::WrapUnique(new BlimpCompositor(render_widget_id, surface_manager, 52 return base::WrapUnique(
Khushal 2016/08/25 05:02:54 This will become MakeUnique when you rebase. :P
David Trainor- moved to gerrit 2016/08/26 17:15:54 Acknowledged.
74 surface_client_id, client)); 53 new BlimpCompositor(render_widget_id, compositor_dependencies, client));
75 } 54 }
76 55
77 void BlimpCompositorManager::OnRenderWidgetCreated(int render_widget_id) { 56 void BlimpCompositorManager::OnRenderWidgetCreated(int render_widget_id) {
78 CHECK(!GetCompositor(render_widget_id)); 57 CHECK(!GetCompositor(render_widget_id));
79 58
80 compositors_[render_widget_id] = 59 compositors_[render_widget_id] =
81 CreateBlimpCompositor(render_widget_id, surface_manager_, 60 CreateBlimpCompositor(render_widget_id, compositor_dependencies_, this);
82 surface_id_allocation_callback_.Run(), this);
83 } 61 }
84 62
85 void BlimpCompositorManager::OnRenderWidgetInitialized(int render_widget_id) { 63 void BlimpCompositorManager::OnRenderWidgetInitialized(int render_widget_id) {
86 if (active_compositor_ && 64 if (active_compositor_ &&
87 active_compositor_->render_widget_id() == render_widget_id) 65 active_compositor_->render_widget_id() == render_widget_id)
88 return; 66 return;
89 67
90 // Detach the content layer from the old compositor. 68 // Detach the content layer from the old compositor.
91 layer_->RemoveAllChildren(); 69 layer_->RemoveAllChildren();
92 70
(...skipping 25 matching lines...) Expand all
118 96
119 void BlimpCompositorManager::OnCompositorMessageReceived( 97 void BlimpCompositorManager::OnCompositorMessageReceived(
120 int render_widget_id, 98 int render_widget_id,
121 std::unique_ptr<cc::proto::CompositorMessage> message) { 99 std::unique_ptr<cc::proto::CompositorMessage> message) {
122 BlimpCompositor* compositor = GetCompositor(render_widget_id); 100 BlimpCompositor* compositor = GetCompositor(render_widget_id);
123 CHECK(compositor); 101 CHECK(compositor);
124 102
125 compositor->OnCompositorMessageReceived(std::move(message)); 103 compositor->OnCompositorMessageReceived(std::move(message));
126 } 104 }
127 105
128 cc::LayerTreeSettings* BlimpCompositorManager::GetLayerTreeSettings() {
129 if (!settings_) {
130 settings_.reset(new cc::LayerTreeSettings);
131
132 // TODO(khushalsagar): The server should selectively send only those
133 // LayerTreeSettings which should remain consistent across the server and
134 // client. Since it currently overrides all settings, ignore them.
135 // See crbug/577985.
136 GenerateLayerTreeSettings(settings_.get());
137 settings_
138 ->abort_commit_before_output_surface_creation = false;
139 settings_->renderer_settings.buffer_to_texture_target_map =
140 BlimpGpuMemoryBufferManager::GetDefaultBufferToTextureTargetMap();
141 settings_->use_output_surface_begin_frame_source = true;
142 }
143
144 return settings_.get();
145 }
146
147 scoped_refptr<base::SingleThreadTaskRunner>
148 BlimpCompositorManager::GetCompositorTaskRunner() {
149 if (compositor_thread_)
150 return compositor_thread_->task_runner();
151
152 base::Thread::Options thread_options;
153 #if defined(OS_ANDROID)
154 thread_options.priority = base::ThreadPriority::DISPLAY;
155 #endif
156 compositor_thread_.reset(new base::Thread("Compositor"));
157 compositor_thread_->StartWithOptions(thread_options);
158
159 scoped_refptr<base::SingleThreadTaskRunner> task_runner =
160 compositor_thread_->task_runner();
161 task_runner->PostTask(
162 FROM_HERE,
163 base::Bind(base::IgnoreResult(&base::ThreadRestrictions::SetIOAllowed),
164 false));
165 // TODO(dtrainor): Determine whether or not we can disallow waiting.
166
167 return task_runner;
168 }
169
170 cc::TaskGraphRunner* BlimpCompositorManager::GetTaskGraphRunner() {
171 return g_task_graph_runner.Pointer();
172 }
173
174 gpu::GpuMemoryBufferManager*
175 BlimpCompositorManager::GetGpuMemoryBufferManager() {
176 return gpu_memory_buffer_manager_;
177 }
178
179 cc::ImageSerializationProcessor*
180 BlimpCompositorManager::GetImageSerializationProcessor() {
181 return BlobImageSerializationProcessor::current();
182 }
183
184 void BlimpCompositorManager::SendWebGestureEvent( 106 void BlimpCompositorManager::SendWebGestureEvent(
185 int render_widget_id, 107 int render_widget_id,
186 const blink::WebGestureEvent& gesture_event) { 108 const blink::WebGestureEvent& gesture_event) {
187 render_widget_feature_->SendWebGestureEvent(kDummyTabId, 109 render_widget_feature_->SendWebGestureEvent(kDummyTabId,
188 render_widget_id, 110 render_widget_id,
189 gesture_event); 111 gesture_event);
190 } 112 }
191 113
192 void BlimpCompositorManager::SendCompositorMessage( 114 void BlimpCompositorManager::SendCompositorMessage(
193 int render_widget_id, 115 int render_widget_id,
194 const cc::proto::CompositorMessage& message) { 116 const cc::proto::CompositorMessage& message) {
195 render_widget_feature_->SendCompositorMessage(kDummyTabId, 117 render_widget_feature_->SendCompositorMessage(kDummyTabId,
196 render_widget_id, 118 render_widget_id,
197 message); 119 message);
198 } 120 }
199 121
200 BlimpCompositor* BlimpCompositorManager::GetCompositor(int render_widget_id) { 122 BlimpCompositor* BlimpCompositorManager::GetCompositor(int render_widget_id) {
201 CompositorMap::const_iterator it = compositors_.find(render_widget_id); 123 CompositorMap::const_iterator it = compositors_.find(render_widget_id);
202 if (it == compositors_.end()) 124 if (it == compositors_.end())
203 return nullptr; 125 return nullptr;
204 return it->second.get(); 126 return it->second.get();
205 } 127 }
206 128
207 } // namespace client 129 } // namespace client
208 } // namespace blimp 130 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698