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

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: Created 4 years, 4 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 }
Khushal 2016/08/24 23:22:46 nit: keep the namespace?
David Trainor- moved to gerrit 2016/08/26 17:15:54 Done.
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) {
Khushal 2016/08/24 23:22:46 DCHECK compositor_dependencies_?
David Trainor- moved to gerrit 2016/08/26 17:15:54 Done.
37 DCHECK(render_widget_feature_); 26 DCHECK(render_widget_feature_);
38 DCHECK(surface_manager_);
39 DCHECK(gpu_memory_buffer_manager_);
40 DCHECK(!surface_id_allocation_callback_.is_null());
41 27
42 render_widget_feature_->SetDelegate(kDummyTabId, this); 28 render_widget_feature_->SetDelegate(kDummyTabId, this);
43 } 29 }
44 30
45 BlimpCompositorManager::~BlimpCompositorManager() { 31 BlimpCompositorManager::~BlimpCompositorManager() {
46 render_widget_feature_->RemoveDelegate(kDummyTabId); 32 render_widget_feature_->RemoveDelegate(kDummyTabId);
47 if (compositor_thread_)
48 compositor_thread_->Stop();
49 } 33 }
50 34
51 void BlimpCompositorManager::SetVisible(bool visible) { 35 void BlimpCompositorManager::SetVisible(bool visible) {
52 visible_ = visible; 36 visible_ = visible;
53 if (active_compositor_) 37 if (active_compositor_)
54 active_compositor_->SetVisible(visible_); 38 active_compositor_->SetVisible(visible_);
55 } 39 }
56 40
57 bool BlimpCompositorManager::OnTouchEvent(const ui::MotionEvent& motion_event) { 41 bool BlimpCompositorManager::OnTouchEvent(const ui::MotionEvent& motion_event) {
58 if (active_compositor_) 42 if (active_compositor_)
59 return active_compositor_->OnTouchEvent(motion_event); 43 return active_compositor_->OnTouchEvent(motion_event);
60 return false; 44 return false;
61 } 45 }
62 46
63 void BlimpCompositorManager::GenerateLayerTreeSettings(
64 cc::LayerTreeSettings* settings) {
65 PopulateCommonLayerTreeSettings(settings);
66 }
67
68 std::unique_ptr<BlimpCompositor> BlimpCompositorManager::CreateBlimpCompositor( 47 std::unique_ptr<BlimpCompositor> BlimpCompositorManager::CreateBlimpCompositor(
69 int render_widget_id, 48 int render_widget_id,
70 cc::SurfaceManager* surface_manager, 49 BlimpCompositorDependencies* compositor_dependencies,
71 uint32_t surface_client_id,
72 BlimpCompositorClient* client) { 50 BlimpCompositorClient* client) {
73 return base::WrapUnique(new BlimpCompositor(render_widget_id, surface_manager, 51 return base::WrapUnique(
74 surface_client_id, client)); 52 new BlimpCompositor(render_widget_id, compositor_dependencies, client));
75 } 53 }
76 54
77 void BlimpCompositorManager::OnRenderWidgetCreated(int render_widget_id) { 55 void BlimpCompositorManager::OnRenderWidgetCreated(int render_widget_id) {
78 CHECK(!GetCompositor(render_widget_id)); 56 CHECK(!GetCompositor(render_widget_id));
79 57
80 compositors_[render_widget_id] = 58 compositors_[render_widget_id] =
81 CreateBlimpCompositor(render_widget_id, surface_manager_, 59 CreateBlimpCompositor(render_widget_id, compositor_dependencies_, this);
82 surface_id_allocation_callback_.Run(), this);
83 } 60 }
84 61
85 void BlimpCompositorManager::OnRenderWidgetInitialized(int render_widget_id) { 62 void BlimpCompositorManager::OnRenderWidgetInitialized(int render_widget_id) {
86 if (active_compositor_ && 63 if (active_compositor_ &&
87 active_compositor_->render_widget_id() == render_widget_id) 64 active_compositor_->render_widget_id() == render_widget_id)
88 return; 65 return;
89 66
90 // Detach the content layer from the old compositor. 67 // Detach the content layer from the old compositor.
91 layer_->RemoveAllChildren(); 68 layer_->RemoveAllChildren();
92 69
(...skipping 25 matching lines...) Expand all
118 95
119 void BlimpCompositorManager::OnCompositorMessageReceived( 96 void BlimpCompositorManager::OnCompositorMessageReceived(
120 int render_widget_id, 97 int render_widget_id,
121 std::unique_ptr<cc::proto::CompositorMessage> message) { 98 std::unique_ptr<cc::proto::CompositorMessage> message) {
122 BlimpCompositor* compositor = GetCompositor(render_widget_id); 99 BlimpCompositor* compositor = GetCompositor(render_widget_id);
123 CHECK(compositor); 100 CHECK(compositor);
124 101
125 compositor->OnCompositorMessageReceived(std::move(message)); 102 compositor->OnCompositorMessageReceived(std::move(message));
126 } 103 }
127 104
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( 105 void BlimpCompositorManager::SendWebGestureEvent(
185 int render_widget_id, 106 int render_widget_id,
186 const blink::WebGestureEvent& gesture_event) { 107 const blink::WebGestureEvent& gesture_event) {
187 render_widget_feature_->SendWebGestureEvent(kDummyTabId, 108 render_widget_feature_->SendWebGestureEvent(kDummyTabId,
188 render_widget_id, 109 render_widget_id,
189 gesture_event); 110 gesture_event);
190 } 111 }
191 112
192 void BlimpCompositorManager::SendCompositorMessage( 113 void BlimpCompositorManager::SendCompositorMessage(
193 int render_widget_id, 114 int render_widget_id,
194 const cc::proto::CompositorMessage& message) { 115 const cc::proto::CompositorMessage& message) {
195 render_widget_feature_->SendCompositorMessage(kDummyTabId, 116 render_widget_feature_->SendCompositorMessage(kDummyTabId,
196 render_widget_id, 117 render_widget_id,
197 message); 118 message);
198 } 119 }
199 120
200 BlimpCompositor* BlimpCompositorManager::GetCompositor(int render_widget_id) { 121 BlimpCompositor* BlimpCompositorManager::GetCompositor(int render_widget_id) {
201 CompositorMap::const_iterator it = compositors_.find(render_widget_id); 122 CompositorMap::const_iterator it = compositors_.find(render_widget_id);
202 if (it == compositors_.end()) 123 if (it == compositors_.end())
203 return nullptr; 124 return nullptr;
204 return it->second.get(); 125 return it->second.get();
205 } 126 }
206 127
207 } // namespace client 128 } // namespace client
208 } // namespace blimp 129 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698