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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 2873243002: Move components/display_compositor to components/viz/display_compositor (Closed)
Patch Set: Rebase Created 3 years, 7 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 16 matching lines...) Expand all
27 #include "cc/layers/surface_layer.h" 27 #include "cc/layers/surface_layer.h"
28 #include "cc/output/compositor_frame.h" 28 #include "cc/output/compositor_frame.h"
29 #include "cc/output/copy_output_request.h" 29 #include "cc/output/copy_output_request.h"
30 #include "cc/output/copy_output_result.h" 30 #include "cc/output/copy_output_result.h"
31 #include "cc/output/latency_info_swap_promise.h" 31 #include "cc/output/latency_info_swap_promise.h"
32 #include "cc/resources/single_release_callback.h" 32 #include "cc/resources/single_release_callback.h"
33 #include "cc/surfaces/surface.h" 33 #include "cc/surfaces/surface.h"
34 #include "cc/surfaces/surface_hittest.h" 34 #include "cc/surfaces/surface_hittest.h"
35 #include "cc/surfaces/surface_manager.h" 35 #include "cc/surfaces/surface_manager.h"
36 #include "cc/trees/layer_tree_host.h" 36 #include "cc/trees/layer_tree_host.h"
37 #include "components/display_compositor/gl_helper.h" 37 #include "components/viz/display_compositor/gl_helper.h"
38 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 38 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
39 #include "content/browser/android/composited_touch_handle_drawable.h" 39 #include "content/browser/android/composited_touch_handle_drawable.h"
40 #include "content/browser/android/content_view_core_impl.h" 40 #include "content/browser/android/content_view_core_impl.h"
41 #include "content/browser/android/ime_adapter_android.h" 41 #include "content/browser/android/ime_adapter_android.h"
42 #include "content/browser/android/overscroll_controller_android.h" 42 #include "content/browser/android/overscroll_controller_android.h"
43 #include "content/browser/android/selection_popup_controller.h" 43 #include "content/browser/android/selection_popup_controller.h"
44 #include "content/browser/android/synchronous_compositor_host.h" 44 #include "content/browser/android/synchronous_compositor_host.h"
45 #include "content/browser/compositor/surface_utils.h" 45 #include "content/browser/compositor/surface_utils.h"
46 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 46 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
47 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" 47 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 } 121 }
122 }; 122 };
123 123
124 using base::android::ApplicationState; 124 using base::android::ApplicationState;
125 using base::android::ApplicationStatusListener; 125 using base::android::ApplicationStatusListener;
126 126
127 class GLHelperHolder { 127 class GLHelperHolder {
128 public: 128 public:
129 static GLHelperHolder* Create(); 129 static GLHelperHolder* Create();
130 130
131 display_compositor::GLHelper* gl_helper() { return gl_helper_.get(); } 131 viz::GLHelper* gl_helper() { return gl_helper_.get(); }
132 bool IsLost() { 132 bool IsLost() {
133 if (!gl_helper_) 133 if (!gl_helper_)
134 return true; 134 return true;
135 return provider_->ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR; 135 return provider_->ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
136 } 136 }
137 137
138 void ReleaseIfPossible(); 138 void ReleaseIfPossible();
139 139
140 private: 140 private:
141 GLHelperHolder(); 141 GLHelperHolder();
142 void Initialize(); 142 void Initialize();
143 void OnContextLost(); 143 void OnContextLost();
144 void OnApplicationStatusChanged(ApplicationState new_state); 144 void OnApplicationStatusChanged(ApplicationState new_state);
145 145
146 scoped_refptr<ui::ContextProviderCommandBuffer> provider_; 146 scoped_refptr<ui::ContextProviderCommandBuffer> provider_;
147 std::unique_ptr<display_compositor::GLHelper> gl_helper_; 147 std::unique_ptr<viz::GLHelper> gl_helper_;
148 148
149 // Set to |false| if there are only stopped activities (or none). 149 // Set to |false| if there are only stopped activities (or none).
150 bool has_running_or_paused_activities_; 150 bool has_running_or_paused_activities_;
151 151
152 std::unique_ptr<ApplicationStatusListener> app_status_listener_; 152 std::unique_ptr<ApplicationStatusListener> app_status_listener_;
153 153
154 DISALLOW_COPY_AND_ASSIGN(GLHelperHolder); 154 DISALLOW_COPY_AND_ASSIGN(GLHelperHolder);
155 }; 155 };
156 156
157 GLHelperHolder::GLHelperHolder() 157 GLHelperHolder::GLHelperHolder()
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 attributes, nullptr, 211 attributes, nullptr,
212 ui::command_buffer_metrics::BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT); 212 ui::command_buffer_metrics::BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT);
213 if (!provider_->BindToCurrentThread()) 213 if (!provider_->BindToCurrentThread())
214 return; 214 return;
215 provider_->ContextGL()->TraceBeginCHROMIUM( 215 provider_->ContextGL()->TraceBeginCHROMIUM(
216 "gpu_toplevel", 216 "gpu_toplevel",
217 base::StringPrintf("CmdBufferImageTransportFactory-%p", provider_.get()) 217 base::StringPrintf("CmdBufferImageTransportFactory-%p", provider_.get())
218 .c_str()); 218 .c_str());
219 provider_->SetLostContextCallback( 219 provider_->SetLostContextCallback(
220 base::Bind(&GLHelperHolder::OnContextLost, base::Unretained(this))); 220 base::Bind(&GLHelperHolder::OnContextLost, base::Unretained(this)));
221 gl_helper_.reset(new display_compositor::GLHelper( 221 gl_helper_.reset(
222 provider_->ContextGL(), provider_->ContextSupport())); 222 new viz::GLHelper(provider_->ContextGL(), provider_->ContextSupport()));
223 223
224 // Unretained() is safe because |this| owns the following two callbacks. 224 // Unretained() is safe because |this| owns the following two callbacks.
225 app_status_listener_.reset(new ApplicationStatusListener(base::Bind( 225 app_status_listener_.reset(new ApplicationStatusListener(base::Bind(
226 &GLHelperHolder::OnApplicationStatusChanged, base::Unretained(this)))); 226 &GLHelperHolder::OnApplicationStatusChanged, base::Unretained(this))));
227 } 227 }
228 228
229 void GLHelperHolder::ReleaseIfPossible() { 229 void GLHelperHolder::ReleaseIfPossible() {
230 if (!has_running_or_paused_activities_ && !g_pending_readback_lock) { 230 if (!has_running_or_paused_activities_ && !g_pending_readback_lock) {
231 gl_helper_.reset(); 231 gl_helper_.reset();
232 provider_ = nullptr; 232 provider_ = nullptr;
(...skipping 28 matching lines...) Expand all
261 delete g_readback_helper_holder; 261 delete g_readback_helper_holder;
262 g_readback_helper_holder = nullptr; 262 g_readback_helper_holder = nullptr;
263 } 263 }
264 264
265 if (!g_readback_helper_holder) 265 if (!g_readback_helper_holder)
266 g_readback_helper_holder = GLHelperHolder::Create(); 266 g_readback_helper_holder = GLHelperHolder::Create();
267 267
268 return g_readback_helper_holder; 268 return g_readback_helper_holder;
269 } 269 }
270 270
271 display_compositor::GLHelper* GetPostReadbackGLHelper() { 271 viz::GLHelper* GetPostReadbackGLHelper() {
272 bool create_if_necessary = true; 272 bool create_if_necessary = true;
273 return GetPostReadbackGLHelperHolder(create_if_necessary)->gl_helper(); 273 return GetPostReadbackGLHelperHolder(create_if_necessary)->gl_helper();
274 } 274 }
275 275
276 void ReleaseGLHelper() { 276 void ReleaseGLHelper() {
277 bool create_if_necessary = false; 277 bool create_if_necessary = false;
278 GLHelperHolder* holder = GetPostReadbackGLHelperHolder(create_if_necessary); 278 GLHelperHolder* holder = GetPostReadbackGLHelperHolder(create_if_necessary);
279 279
280 if (holder) { 280 if (holder) {
281 holder->ReleaseIfPossible(); 281 holder->ReleaseIfPossible();
282 } 282 }
283 } 283 }
284 284
285 void CopyFromCompositingSurfaceFinished( 285 void CopyFromCompositingSurfaceFinished(
286 const ReadbackRequestCallback& callback, 286 const ReadbackRequestCallback& callback,
287 std::unique_ptr<cc::SingleReleaseCallback> release_callback, 287 std::unique_ptr<cc::SingleReleaseCallback> release_callback,
288 std::unique_ptr<SkBitmap> bitmap, 288 std::unique_ptr<SkBitmap> bitmap,
289 const base::TimeTicks& start_time, 289 const base::TimeTicks& start_time,
290 scoped_refptr<PendingReadbackLock> readback_lock, 290 scoped_refptr<PendingReadbackLock> readback_lock,
291 bool result) { 291 bool result) {
292 TRACE_EVENT0( 292 TRACE_EVENT0(
293 "cc", "RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceFinished"); 293 "cc", "RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceFinished");
294 gpu::SyncToken sync_token; 294 gpu::SyncToken sync_token;
295 if (result) { 295 if (result) {
296 display_compositor::GLHelper* gl_helper = GetPostReadbackGLHelper(); 296 viz::GLHelper* gl_helper = GetPostReadbackGLHelper();
297 if (gl_helper) 297 if (gl_helper)
298 gl_helper->GenerateSyncToken(&sync_token); 298 gl_helper->GenerateSyncToken(&sync_token);
299 } 299 }
300 300
301 // PostTask() to make sure the |readback_lock| is released. Also do this 301 // PostTask() to make sure the |readback_lock| is released. Also do this
302 // synchronous GPU operation in a clean callstack. 302 // synchronous GPU operation in a clean callstack.
303 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 303 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
304 base::Bind(&ReleaseGLHelper)); 304 base::Bind(&ReleaseGLHelper));
305 305
306 const bool lost_resource = !sync_token.HasData(); 306 const bool lost_resource = !sync_token.HasData();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 TRACE_EVENT0("cc", 355 TRACE_EVENT0("cc",
356 "RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult"); 356 "RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult");
357 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) 357 if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty())
358 return; 358 return;
359 cc::TextureMailbox texture_mailbox; 359 cc::TextureMailbox texture_mailbox;
360 std::unique_ptr<cc::SingleReleaseCallback> release_callback; 360 std::unique_ptr<cc::SingleReleaseCallback> release_callback;
361 result->TakeTexture(&texture_mailbox, &release_callback); 361 result->TakeTexture(&texture_mailbox, &release_callback);
362 DCHECK(texture_mailbox.IsTexture()); 362 DCHECK(texture_mailbox.IsTexture());
363 if (!texture_mailbox.IsTexture()) 363 if (!texture_mailbox.IsTexture())
364 return; 364 return;
365 display_compositor::GLHelper* gl_helper = GetPostReadbackGLHelper(); 365 viz::GLHelper* gl_helper = GetPostReadbackGLHelper();
366 if (!gl_helper) 366 if (!gl_helper)
367 return; 367 return;
368 if (!gl_helper->IsReadbackConfigSupported(color_type)) 368 if (!gl_helper->IsReadbackConfigSupported(color_type))
369 color_type = kRGBA_8888_SkColorType; 369 color_type = kRGBA_8888_SkColorType;
370 370
371 gfx::Size output_size_in_pixel; 371 gfx::Size output_size_in_pixel;
372 if (dst_size_in_pixel.IsEmpty()) 372 if (dst_size_in_pixel.IsEmpty())
373 output_size_in_pixel = result->size(); 373 output_size_in_pixel = result->size();
374 else 374 else
375 output_size_in_pixel = dst_size_in_pixel; 375 output_size_in_pixel = dst_size_in_pixel;
(...skipping 11 matching lines...) Expand all
387 uint8_t* pixels = static_cast<uint8_t*>(bitmap->getPixels()); 387 uint8_t* pixels = static_cast<uint8_t*>(bitmap->getPixels());
388 388
389 ignore_result(scoped_callback_runner.Release()); 389 ignore_result(scoped_callback_runner.Release());
390 390
391 gl_helper->CropScaleReadbackAndCleanMailbox( 391 gl_helper->CropScaleReadbackAndCleanMailbox(
392 texture_mailbox.mailbox(), texture_mailbox.sync_token(), result->size(), 392 texture_mailbox.mailbox(), texture_mailbox.sync_token(), result->size(),
393 gfx::Rect(result->size()), output_size_in_pixel, pixels, color_type, 393 gfx::Rect(result->size()), output_size_in_pixel, pixels, color_type,
394 base::Bind(&CopyFromCompositingSurfaceFinished, callback, 394 base::Bind(&CopyFromCompositingSurfaceFinished, callback,
395 base::Passed(&release_callback), base::Passed(&bitmap), 395 base::Passed(&release_callback), base::Passed(&bitmap),
396 start_time, readback_lock), 396 start_time, readback_lock),
397 display_compositor::GLHelper::SCALER_QUALITY_GOOD); 397 viz::GLHelper::SCALER_QUALITY_GOOD);
398 } 398 }
399 399
400 void RecordToolTypeForActionDown(const ui::MotionEventAndroid& event) { 400 void RecordToolTypeForActionDown(const ui::MotionEventAndroid& event) {
401 ui::MotionEventAndroid::Action action = event.GetAction(); 401 ui::MotionEventAndroid::Action action = event.GetAction();
402 if (action == ui::MotionEventAndroid::ACTION_DOWN || 402 if (action == ui::MotionEventAndroid::ACTION_DOWN ||
403 action == ui::MotionEventAndroid::ACTION_POINTER_DOWN || 403 action == ui::MotionEventAndroid::ACTION_POINTER_DOWN ||
404 action == ui::MotionEventAndroid::ACTION_BUTTON_PRESS) { 404 action == ui::MotionEventAndroid::ACTION_BUTTON_PRESS) {
405 UMA_HISTOGRAM_ENUMERATION("Event.AndroidActionDown.ToolType", 405 UMA_HISTOGRAM_ENUMERATION("Event.AndroidActionDown.ToolType",
406 event.GetToolType(0), 406 event.GetToolType(0),
407 ui::MotionEventAndroid::TOOL_TYPE_LAST + 1); 407 ui::MotionEventAndroid::TOOL_TYPE_LAST + 1);
(...skipping 1815 matching lines...) Expand 10 before | Expand all | Expand 10 after
2223 2223
2224 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); 2224 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor();
2225 if (!compositor) 2225 if (!compositor)
2226 return; 2226 return;
2227 2227
2228 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( 2228 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>(
2229 overscroll_refresh_handler, compositor, view_.GetDipScale()); 2229 overscroll_refresh_handler, compositor, view_.GetDipScale());
2230 } 2230 }
2231 2231
2232 } // namespace content 2232 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698