| Index: ui/accelerated_widget_mac/window_resize_helper_mac.h
|
| diff --git a/content/browser/renderer_host/render_widget_resize_helper_mac.h b/ui/accelerated_widget_mac/window_resize_helper_mac.h
|
| similarity index 50%
|
| copy from content/browser/renderer_host/render_widget_resize_helper_mac.h
|
| copy to ui/accelerated_widget_mac/window_resize_helper_mac.h
|
| index 132fb07f5f3e022315c6924e5738cc6fc8a3a323..40918a79155e14bb0490f3f2da5d61d09d09274a 100644
|
| --- a/content/browser/renderer_host/render_widget_resize_helper_mac.h
|
| +++ b/ui/accelerated_widget_mac/window_resize_helper_mac.h
|
| @@ -1,54 +1,66 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_RESIZE_HELPER_MAC_H_
|
| -#define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_RESIZE_HELPER_MAC_H_
|
| +#ifndef UI_ACCELERATED_WIDGET_MAC_WINDOW_RESIZE_HELPER_MAC_H_
|
| +#define UI_ACCELERATED_WIDGET_MAC_WINDOW_RESIZE_HELPER_MAC_H_
|
|
|
| #include "base/lazy_instance.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/synchronization/lock.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "ipc/ipc_message.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "ui/accelerated_widget_mac/accelerated_widget_mac_export.h"
|
|
|
| -namespace content {
|
| +namespace base {
|
| +class SingleThreadTaskRunner;
|
| +class TimeDelta;
|
| +class WaitableEvent;
|
| +}
|
|
|
| -// RenderWidgetResizeHelper is used to make resize appear smooth. That is to
|
| +namespace ui {
|
| +
|
| +// WindowResizeHelperMac is used to make resize appear smooth. That is to
|
| // say, make sure that the window size and the size of the content being drawn
|
| // in that window are resized in lock-step. This is accomplished by waiting
|
| -// inside -[RenderWidgetHostViewCocoa setFrameSize:] for the renderer (and
|
| -// potentially browser compositor as well) to produce a frame of same size
|
| -// as the RenderWidgetHostViewCocoa.
|
| +// inside AppKit drawing routines on the UI thread for the compositor to produce
|
| +// a frame of same size as the NSView that hosts an AcceleratedWidgetMac.
|
| //
|
| -// The function of waiting for a frame of the correct size is done inside
|
| +// For RenderWidgets, waiting for a frame of the correct size is done inside
|
| // RenderWidgetHostImpl::WaitForSurface. That function will call
|
| -// RenderWidgetResizeHelper::WaitForSingleTaskToRun until a timeout occurs,
|
| -// or the corresponding RenderWidgetHostViewCocoa has a renderer frame of the
|
| +// WindowResizeHelperMac::WaitForSingleTaskToRun until a timeout occurs,
|
| +// or the corresponding AcceleratedWidgetMac has a renderer frame of the
|
| // same size as its NSView.
|
| //
|
| // This is somewhat complicated because waiting for frames requires that
|
| // that the browser handle the IPCs (from the renderer and the GPU processes)
|
| // that are required to pick up a new frame. In the ordinary run of things
|
| -// (ignoring RenderWidgetResizeHelper), those IPCs arrive on the IO thread
|
| +// (ignoring WindowResizeHelperMac), those IPCs arrive on the IO thread
|
| // and are posted as tasks to the UI thread either by the RenderMessageFilter
|
| // (for renderer processes) or the GpuProcessHostUIShim (for the GPU process).
|
| +//
|
| +// To synchronize these processes, content uses RenderWidgetResizeHelper.
|
| // The IPCs that are required to create new frames for smooth resize are sent
|
| // to the RenderWidgetResizeHelper using the PostRendererProcessMsg and
|
| // PostGpuProcessMsg methods. These functions will post them as tasks to the UI
|
| // thread (as usual), and will also enqueue them into a queue which will be
|
| -// read and run in RenderWidgetResizeHelper::WaitForSingleTaskToRun, potentially
|
| +// read and run in WindowResizeHelperMac::WaitForSingleTaskToRun, potentially
|
| // before the task posted to the UI thread is run. Some care is taken (see
|
| // WrappedTask) to make sure that the messages are only executed once.
|
| //
|
| // This is further complicated because, in order for a frame to appear, it is
|
| // necessary to run tasks posted by the ui::Compositor. To accomplish this, the
|
| -// RenderWidgetResizeHelper provides a base::SingleThreadTaskRunner which,
|
| +// WindowResizeHelperMac provides a base::SingleThreadTaskRunner which,
|
| // when a task is posted to it, enqueues the task in the aforementioned queue,
|
| -// which may be pumped by RenderWidgetResizeHelper::WaitForSingleTaskToRun.
|
| -//
|
| -class RenderWidgetResizeHelper {
|
| +// which may be pumped by WindowResizeHelperMac::WaitForSingleTaskToRun.
|
| +class ACCELERATED_WIDGET_MAC_EXPORT WindowResizeHelperMac {
|
| public:
|
| - static RenderWidgetResizeHelper* Get();
|
| + static WindowResizeHelperMac* Get();
|
| +
|
| + // Initializes the pumpable task_runner(), providing it with the task runner
|
| + // for UI thread tasks. task_runner() will be null before Init() is called,
|
| + // and WaitForSingleTaskToRun() will immediately return false.
|
| + void Init(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner);
|
| +
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner() const;
|
|
|
| // UI THREAD ONLY -----------------------------------------------------------
|
| @@ -57,22 +69,10 @@ class RenderWidgetResizeHelper {
|
| // false if no task ran.
|
| bool WaitForSingleTaskToRun(const base::TimeDelta& max_delay);
|
|
|
| - // IO THREAD ONLY -----------------------------------------------------------
|
| -
|
| - // This will cause |msg| to be handled by the RenderProcessHost corresponding
|
| - // to |render_process_id|, on the UI thread. This will either happen when the
|
| - // ordinary message loop would run it, or potentially earlier in a call to
|
| - // WaitForSingleTaskToRun .
|
| - void PostRendererProcessMsg(int render_process_id, const IPC::Message& msg);
|
| -
|
| - // This is similar to PostRendererProcessMsg, but will handle the message in
|
| - // the GpuProcessHostUIShim corresponding to |gpu_host_id|.
|
| - void PostGpuProcessMsg(int gpu_host_id, const IPC::Message& msg);
|
| -
|
| private:
|
| - friend struct base::DefaultLazyInstanceTraits<RenderWidgetResizeHelper>;
|
| - RenderWidgetResizeHelper();
|
| - ~RenderWidgetResizeHelper();
|
| + friend struct base::DefaultLazyInstanceTraits<WindowResizeHelperMac>;
|
| + WindowResizeHelperMac();
|
| + ~WindowResizeHelperMac();
|
|
|
| // This helper is needed to create a ScopedAllowWait inside the scope of a
|
| // class where it is allowed.
|
| @@ -82,9 +82,9 @@ class RenderWidgetResizeHelper {
|
| // the task queue and does the actual work for WaitForSingleTaskToRun.
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(RenderWidgetResizeHelper);
|
| + DISALLOW_COPY_AND_ASSIGN(WindowResizeHelperMac);
|
| };
|
|
|
| -} // namespace content
|
| +} // namespace ui
|
|
|
| -#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_RESIZE_HELPER_MAC_H_
|
| +#endif // UI_ACCELERATED_WIDGET_MAC_WINDOW_RESIZE_HELPER_MAC_H_
|
|
|