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

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

Issue 8060045: Use shared D3D9 texture to transport the compositor's backing buffer to the browser... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/browser/renderer_host/backing_store_skia.h" 8 #include "content/browser/renderer_host/backing_store_skia.h"
9 #include "content/browser/renderer_host/render_widget_host.h" 9 #include "content/browser/renderer_host/render_widget_host.h"
10 #include "content/browser/renderer_host/web_input_event_aura.h" 10 #include "content/browser/renderer_host/web_input_event_aura.h"
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 272
273 void RenderWidgetHostViewAura::SetTooltipText(const string16& tooltip_text) { 273 void RenderWidgetHostViewAura::SetTooltipText(const string16& tooltip_text) {
274 tooltip_ = tooltip_text; 274 tooltip_ = tooltip_text;
275 } 275 }
276 276
277 BackingStore* RenderWidgetHostViewAura::AllocBackingStore( 277 BackingStore* RenderWidgetHostViewAura::AllocBackingStore(
278 const gfx::Size& size) { 278 const gfx::Size& size) {
279 return new BackingStoreSkia(host_, size); 279 return new BackingStoreSkia(host_, size);
280 } 280 }
281 281
282 void RenderWidgetHostViewAura::AcceleratedSurfaceBuffersSwapped(
283 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
284 int gpu_host_id) {
285 #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT)
286 window_->layer()->SetExternalTexture(
287 accelerated_surface_containers_[params.surface_id]->GetTexture());
288 glFlush();
289
290 if (!window_->layer()->GetCompositor()) {
291 // We have no compositor, so we have no way to display the surface
292 // Must still send the ACK.
293 AcknowledgeSwapBuffers(params.route_id, gpu_host_id);
294 } else {
295 window_->layer()->ScheduleDraw();
296
297 // Add sending an ACK to the list of things to do OnCompositingEnded
298 on_compositing_ended_callbacks_.push_back(
299 base::Bind(AcknowledgeSwapBuffers, params.route_id, gpu_host_id));
300 ui::Compositor* compositor = window_->layer()->GetCompositor();
301 if (!compositor->HasObserver(this))
302 compositor->AddObserver(this);
303 }
304 #else
305 NOTREACHED();
306 #endif
307 }
308
282 #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) 309 #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT)
283 void RenderWidgetHostViewAura::AcceleratedSurfaceNew( 310 void RenderWidgetHostViewAura::AcceleratedSurfaceNew(
284 int32 width, 311 int32 width,
285 int32 height, 312 int32 height,
286 uint64* surface_id, 313 uint64* surface_id,
287 TransportDIB::Handle* surface_handle) { 314 TransportDIB::Handle* surface_handle) {
288 scoped_refptr<AcceleratedSurfaceContainerLinux> surface( 315 scoped_refptr<AcceleratedSurfaceContainerLinux> surface(
289 AcceleratedSurfaceContainerLinux::Create(gfx::Size(width, height))); 316 AcceleratedSurfaceContainerLinux::Create(gfx::Size(width, height)));
290 if (!surface->Initialize(surface_id)) { 317 if (!surface->Initialize(surface_id)) {
291 LOG(ERROR) << "Failed to create AcceleratedSurfaceContainer"; 318 LOG(ERROR) << "Failed to create AcceleratedSurfaceContainer";
292 return; 319 return;
293 } 320 }
294 *surface_handle = surface->Handle(); 321 *surface_handle = surface->Handle();
295 322
296 accelerated_surface_containers_[*surface_id] = surface; 323 accelerated_surface_containers_[*surface_id] = surface;
297 } 324 }
298 325
299 void RenderWidgetHostViewAura::AcceleratedSurfaceBuffersSwapped(
300 uint64 surface_id,
301 int32 route_id,
302 int gpu_host_id) {
303 window_->layer()->SetExternalTexture(
304 accelerated_surface_containers_[surface_id]->GetTexture());
305 glFlush();
306
307 if (!window_->layer()->GetCompositor()) {
308 // We have no compositor, so we have no way to display the surface
309 AcknowledgeSwapBuffers(route_id, gpu_host_id); // Must still send the ACK
310 } else {
311 window_->layer()->ScheduleDraw();
312
313 // Add sending an ACK to the list of things to do OnCompositingEnded
314 on_compositing_ended_callbacks_.push_back(
315 base::Bind(AcknowledgeSwapBuffers, route_id, gpu_host_id));
316 ui::Compositor* compositor = window_->layer()->GetCompositor();
317 if (!compositor->HasObserver(this))
318 compositor->AddObserver(this);
319 }
320 }
321
322 void RenderWidgetHostViewAura::AcceleratedSurfaceRelease(uint64 surface_id) { 326 void RenderWidgetHostViewAura::AcceleratedSurfaceRelease(uint64 surface_id) {
323 accelerated_surface_containers_.erase(surface_id); 327 accelerated_surface_containers_.erase(surface_id);
324 } 328 }
325 #endif 329 #endif
326 330
327 void RenderWidgetHostViewAura::SetBackground(const SkBitmap& background) { 331 void RenderWidgetHostViewAura::SetBackground(const SkBitmap& background) {
328 RenderWidgetHostView::SetBackground(background); 332 RenderWidgetHostView::SetBackground(background);
329 host_->SetBackground(background); 333 host_->SetBackground(background);
330 #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) 334 #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT)
331 window_->layer()->SetFillsBoundsOpaquely(background.isOpaque()); 335 window_->layer()->SetFillsBoundsOpaquely(background.isOpaque());
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 aura::Desktop* desktop = aura::Desktop::GetInstance(); 542 aura::Desktop* desktop = aura::Desktop::GetInstance();
539 if (desktop->GetEventHandlerForPoint(screen_point) != window_) 543 if (desktop->GetEventHandlerForPoint(screen_point) != window_)
540 return; 544 return;
541 545
542 gfx::NativeCursor cursor = current_cursor_.GetNativeCursor(); 546 gfx::NativeCursor cursor = current_cursor_.GetNativeCursor();
543 if (is_loading_ && cursor == aura::kCursorPointer) 547 if (is_loading_ && cursor == aura::kCursorPointer)
544 cursor = aura::kCursorProgress; 548 cursor = aura::kCursorProgress;
545 549
546 aura::Desktop::GetInstance()->SetCursor(cursor); 550 aura::Desktop::GetInstance()->SetCursor(cursor);
547 } 551 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698