| Index: content/browser/renderer_host/render_widget_host_view_win.cc
|
| ===================================================================
|
| --- content/browser/renderer_host/render_widget_host_view_win.cc (revision 108480)
|
| +++ content/browser/renderer_host/render_widget_host_view_win.cc (working copy)
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/bind.h"
|
| #include "base/command_line.h"
|
| #include "base/i18n/rtl.h"
|
| #include "base/metrics/histogram.h"
|
| @@ -19,11 +20,14 @@
|
| #include "content/browser/accessibility/browser_accessibility_manager.h"
|
| #include "content/browser/accessibility/browser_accessibility_state.h"
|
| #include "content/browser/accessibility/browser_accessibility_win.h"
|
| +#include "content/browser/gpu/gpu_process_host.h"
|
| +#include "content/browser/gpu/gpu_process_host_ui_shim.h"
|
| #include "content/browser/plugin_process_host.h"
|
| #include "content/browser/renderer_host/backing_store.h"
|
| #include "content/browser/renderer_host/backing_store_win.h"
|
| #include "content/browser/renderer_host/render_process_host.h"
|
| #include "content/browser/renderer_host/render_widget_host.h"
|
| +#include "content/common/gpu/gpu_messages.h"
|
| #include "content/common/plugin_messages.h"
|
| #include "content/common/view_messages.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -54,6 +58,8 @@
|
| #include "webkit/plugins/npapi/webplugin.h"
|
| #include "webkit/plugins/npapi/webplugin_delegate_impl.h"
|
|
|
| +#pragma comment(lib, "d3d9.lib")
|
| +
|
| using base::TimeDelta;
|
| using base::TimeTicks;
|
| using content::BrowserThread;
|
| @@ -203,6 +209,21 @@
|
| return ::DefWindowProc(window, message, wparam, lparam);
|
| }
|
|
|
| +void SendToGpuProcessHost(int gpu_host_id, IPC::Message* message) {
|
| + GpuProcessHost* gpu_process_host = GpuProcessHost::FromID(gpu_host_id);
|
| + if (!gpu_process_host) {
|
| + delete message;
|
| + return;
|
| + }
|
| +
|
| + gpu_process_host->Send(message);
|
| +}
|
| +
|
| +void PostTaskOnIOThread(const tracked_objects::Location& from_here,
|
| + base::Closure task) {
|
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, task);
|
| +}
|
| +
|
| bool DecodeZoomGesture(HWND hwnd, const GESTUREINFO& gi,
|
| content::PageZoom* zoom,
|
| POINT* zoom_center) {
|
| @@ -324,6 +345,9 @@
|
| RenderWidgetHostViewWin::~RenderWidgetHostViewWin() {
|
| UnlockMouse();
|
| ResetTooltip();
|
| +
|
| + if (accelerated_surface_)
|
| + accelerated_surface_->Destroy();
|
| }
|
|
|
| void RenderWidgetHostViewWin::CreateWnd(HWND parent) {
|
| @@ -1750,8 +1774,14 @@
|
| }
|
|
|
| void RenderWidgetHostViewWin::ScheduleComposite() {
|
| - if (render_widget_host_)
|
| - render_widget_host_->ScheduleComposite();
|
| + // If we have a previous frame then present it immediately. Otherwise request
|
| + // a new frame be composited.
|
| + if (accelerated_surface_.get()) {
|
| + accelerated_surface_->Present();
|
| + } else {
|
| + if (render_widget_host_)
|
| + render_widget_host_->ScheduleComposite();
|
| + }
|
| }
|
|
|
| // Creates a HWND within the RenderWidgetHostView that will serve as a host
|
| @@ -1846,6 +1876,27 @@
|
| }
|
| }
|
|
|
| +void RenderWidgetHostViewWin::AcceleratedSurfaceBuffersSwapped(
|
| + const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
|
| + int gpu_host_id) {
|
| + if (!accelerated_surface_.get() && compositor_host_window_) {
|
| + accelerated_surface_ = new AcceleratedSurface(compositor_host_window_);
|
| + accelerated_surface_->Initialize();
|
| + }
|
| +
|
| + base::Closure acknowledge_task =
|
| + base::Bind(SendToGpuProcessHost,
|
| + gpu_host_id,
|
| + new AcceleratedSurfaceMsg_BuffersSwappedACK(params.route_id));
|
| +
|
| + accelerated_surface_->AsyncPresentAndAcknowledge(
|
| + params.size,
|
| + params.surface_id,
|
| + base::Bind(PostTaskOnIOThread,
|
| + FROM_HERE,
|
| + acknowledge_task));
|
| +}
|
| +
|
| void RenderWidgetHostViewWin::SetAccessibilityFocus(int acc_obj_id) {
|
| if (!render_widget_host_)
|
| return;
|
|
|