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

Side by Side Diff: ui/accelerated_widget_mac/window_resize_helper_mac.cc

Issue 1354533002: Mac: move content::RenderWidgetResizeHelper to ui::WindowResizeHelperMac (acelerated_widget_mac) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rejig class comments Created 5 years, 3 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
« no previous file with comments | « ui/accelerated_widget_mac/window_resize_helper_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_resize_helper_mac.h" 5 #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "content/browser/gpu/gpu_process_host_ui_shim.h" 9 #include "base/bind.h"
10 #include "content/browser/renderer_host/render_process_host_impl.h" 10 #include "base/callback.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/synchronization/lock.h"
13 #include "base/synchronization/waitable_event.h"
14 #include "base/threading/thread_restrictions.h"
12 15
13 namespace content { 16 namespace ui {
14 namespace { 17 namespace {
15 18
16 class WrappedTask; 19 class WrappedTask;
17 class PumpableTaskRunner; 20 class PumpableTaskRunner;
18 typedef std::list<WrappedTask*> WrappedTaskQueue; 21 typedef std::list<WrappedTask*> WrappedTaskQueue;
19 typedef base::Callback<void(base::WaitableEvent*, base::TimeDelta)> 22 typedef base::Callback<void(base::WaitableEvent*, base::TimeDelta)>
20 EventTimedWaitCallback; 23 EventTimedWaitCallback;
21 24
22 // A wrapper for IPCs and tasks that we may potentially execute in 25 // A wrapper for IPCs and tasks that we may potentially execute in
23 // WaitForSingleTaskToRun. Because these tasks are sent to two places to run, 26 // WaitForSingleTaskToRun. Because these tasks are sent to two places to run,
(...skipping 22 matching lines...) Expand all
46 DISALLOW_COPY_AND_ASSIGN(WrappedTask); 49 DISALLOW_COPY_AND_ASSIGN(WrappedTask);
47 }; 50 };
48 51
49 // The PumpableTaskRunner is a task runner that will wrap tasks in an 52 // The PumpableTaskRunner is a task runner that will wrap tasks in an
50 // WrappedTask, enqueues that wrapped task in the queue to be pumped via 53 // WrappedTask, enqueues that wrapped task in the queue to be pumped via
51 // WaitForSingleWrappedTaskToRun during resizes, and posts the task to a 54 // WaitForSingleWrappedTaskToRun during resizes, and posts the task to a
52 // target task runner. The posted task will run only once, either through a 55 // target task runner. The posted task will run only once, either through a
53 // WaitForSingleWrappedTaskToRun call or through the target task runner. 56 // WaitForSingleWrappedTaskToRun call or through the target task runner.
54 class PumpableTaskRunner : public base::SingleThreadTaskRunner { 57 class PumpableTaskRunner : public base::SingleThreadTaskRunner {
55 public: 58 public:
56 explicit PumpableTaskRunner( 59 PumpableTaskRunner(
57 const EventTimedWaitCallback& event_timed_wait_callback); 60 const EventTimedWaitCallback& event_timed_wait_callback,
61 const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner);
58 62
59 // Enqueue WrappedTask and post it to |target_task_runner_|. 63 // Enqueue WrappedTask and post it to |target_task_runner_|.
60 bool EnqueueAndPostWrappedTask(const tracked_objects::Location& from_here, 64 bool EnqueueAndPostWrappedTask(const tracked_objects::Location& from_here,
61 WrappedTask* task, 65 WrappedTask* task,
62 base::TimeDelta delay); 66 base::TimeDelta delay);
63 67
64 // Wait at most |max_delay| to run an enqueued task. 68 // Wait at most |max_delay| to run an enqueued task.
65 bool WaitForSingleWrappedTaskToRun(const base::TimeDelta& max_delay); 69 bool WaitForSingleWrappedTaskToRun(const base::TimeDelta& max_delay);
66 70
67 // Remove a wrapped task from the queue.
68 void RemoveWrappedTaskFromQueue(WrappedTask* task);
69
70 // base::SingleThreadTaskRunner implementation: 71 // base::SingleThreadTaskRunner implementation:
71 bool PostDelayedTask(const tracked_objects::Location& from_here, 72 bool PostDelayedTask(const tracked_objects::Location& from_here,
72 const base::Closure& task, 73 const base::Closure& task,
73 base::TimeDelta delay) override; 74 base::TimeDelta delay) override;
74 75
75 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, 76 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
76 const base::Closure& task, 77 const base::Closure& task,
77 base::TimeDelta delay) override; 78 base::TimeDelta delay) override;
78 79
79 bool RunsTasksOnCurrentThread() const override; 80 bool RunsTasksOnCurrentThread() const override;
(...skipping 16 matching lines...) Expand all
96 base::WaitableEvent event_; 97 base::WaitableEvent event_;
97 98
98 // Callback to call TimedWait on |event_| from an appropriate class. 99 // Callback to call TimedWait on |event_| from an appropriate class.
99 EventTimedWaitCallback event_timed_wait_callback_; 100 EventTimedWaitCallback event_timed_wait_callback_;
100 101
101 scoped_refptr<base::SingleThreadTaskRunner> target_task_runner_; 102 scoped_refptr<base::SingleThreadTaskRunner> target_task_runner_;
102 103
103 DISALLOW_COPY_AND_ASSIGN(PumpableTaskRunner); 104 DISALLOW_COPY_AND_ASSIGN(PumpableTaskRunner);
104 }; 105 };
105 106
106 void HandleGpuIPC(int gpu_host_id, const IPC::Message& message) { 107 base::LazyInstance<WindowResizeHelperMac>::Leaky g_window_resize_helper =
107 GpuProcessHostUIShim* host = GpuProcessHostUIShim::FromID(gpu_host_id);
108 if (host)
109 host->OnMessageReceived(message);
110 }
111
112 void HandleRendererIPC(int render_process_id, const IPC::Message& message) {
113 RenderProcessHost* host = RenderProcessHost::FromID(render_process_id);
114 if (host)
115 host->OnMessageReceived(message);
116 }
117
118 base::LazyInstance<RenderWidgetResizeHelper> g_render_widget_task_runner =
119 LAZY_INSTANCE_INITIALIZER; 108 LAZY_INSTANCE_INITIALIZER;
120 109
121 //////////////////////////////////////////////////////////////////////////////// 110 ////////////////////////////////////////////////////////////////////////////////
122 // WrappedTask 111 // WrappedTask
123 112
124 WrappedTask::WrappedTask(const base::Closure& closure, base::TimeDelta delay) 113 WrappedTask::WrappedTask(const base::Closure& closure, base::TimeDelta delay)
125 : closure_(closure), 114 : closure_(closure),
126 can_run_time_(base::TimeTicks::Now() + delay), 115 can_run_time_(base::TimeTicks::Now() + delay),
127 has_run_(false), 116 has_run_(false),
128 sequence_number_(0) {} 117 sequence_number_(0) {}
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 pumpable_task_runner_->task_queue_.erase(iterator_); 163 pumpable_task_runner_->task_queue_.erase(iterator_);
175 iterator_ = pumpable_task_runner_->task_queue_.end(); 164 iterator_ = pumpable_task_runner_->task_queue_.end();
176 } 165 }
177 pumpable_task_runner_ = NULL; 166 pumpable_task_runner_ = NULL;
178 } 167 }
179 168
180 //////////////////////////////////////////////////////////////////////////////// 169 ////////////////////////////////////////////////////////////////////////////////
181 // PumpableTaskRunner 170 // PumpableTaskRunner
182 171
183 PumpableTaskRunner::PumpableTaskRunner( 172 PumpableTaskRunner::PumpableTaskRunner(
184 const EventTimedWaitCallback& event_timed_wait_callback) 173 const EventTimedWaitCallback& event_timed_wait_callback,
174 const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner)
185 : event_(false /* auto-reset */, false /* initially signalled */), 175 : event_(false /* auto-reset */, false /* initially signalled */),
186 event_timed_wait_callback_(event_timed_wait_callback), 176 event_timed_wait_callback_(event_timed_wait_callback),
187 target_task_runner_( 177 target_task_runner_(target_task_runner) {}
188 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)) {}
189 178
190 PumpableTaskRunner::~PumpableTaskRunner() { 179 PumpableTaskRunner::~PumpableTaskRunner() {
191 // Because tasks hold a reference to the task runner, the task queue must 180 // Because tasks hold a reference to the task runner, the task queue must
192 // be empty when it is destroyed. 181 // be empty when it is destroyed.
193 DCHECK(task_queue_.empty()); 182 DCHECK(task_queue_.empty());
194 } 183 }
195 184
196 bool PumpableTaskRunner::WaitForSingleWrappedTaskToRun( 185 bool PumpableTaskRunner::WaitForSingleWrappedTaskToRun(
197 const base::TimeDelta& max_delay) { 186 const base::TimeDelta& max_delay) {
198 base::TimeTicks stop_waiting_time = base::TimeTicks::Now() + max_delay; 187 base::TimeTicks stop_waiting_time = base::TimeTicks::Now() + max_delay;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 return false; 271 return false;
283 } 272 }
284 273
285 bool PumpableTaskRunner::RunsTasksOnCurrentThread() const { 274 bool PumpableTaskRunner::RunsTasksOnCurrentThread() const {
286 return target_task_runner_->RunsTasksOnCurrentThread(); 275 return target_task_runner_->RunsTasksOnCurrentThread();
287 } 276 }
288 277
289 } // namespace 278 } // namespace
290 279
291 //////////////////////////////////////////////////////////////////////////////// 280 ////////////////////////////////////////////////////////////////////////////////
292 // RenderWidgetResizeHelper 281 // WindowResizeHelperMac
293 282
294 scoped_refptr<base::SingleThreadTaskRunner> 283 scoped_refptr<base::SingleThreadTaskRunner> WindowResizeHelperMac::task_runner()
295 RenderWidgetResizeHelper::task_runner() const { 284 const {
296 return task_runner_; 285 return task_runner_;
297 } 286 }
298 287
299 // static 288 // static
300 RenderWidgetResizeHelper* RenderWidgetResizeHelper::Get() { 289 WindowResizeHelperMac* WindowResizeHelperMac::Get() {
301 return g_render_widget_task_runner.Pointer(); 290 return g_window_resize_helper.Pointer();
302 } 291 }
303 292
304 bool RenderWidgetResizeHelper::WaitForSingleTaskToRun( 293 void WindowResizeHelperMac::Init(
294 const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner) {
295 DCHECK(!task_runner_);
296 task_runner_ = new PumpableTaskRunner(
297 base::Bind(&WindowResizeHelperMac::EventTimedWait), target_task_runner);
298 }
299
300 bool WindowResizeHelperMac::WaitForSingleTaskToRun(
305 const base::TimeDelta& max_delay) { 301 const base::TimeDelta& max_delay) {
306 PumpableTaskRunner* pumpable_task_runner = 302 PumpableTaskRunner* pumpable_task_runner =
307 reinterpret_cast<PumpableTaskRunner*>(task_runner_.get()); 303 static_cast<PumpableTaskRunner*>(task_runner_.get());
304 if (!pumpable_task_runner)
305 return false;
308 return pumpable_task_runner->WaitForSingleWrappedTaskToRun(max_delay); 306 return pumpable_task_runner->WaitForSingleWrappedTaskToRun(max_delay);
309 } 307 }
310 308
311 void RenderWidgetResizeHelper::PostRendererProcessMsg(int render_process_id, 309 WindowResizeHelperMac::WindowResizeHelperMac() {}
312 const IPC::Message& msg) { 310 WindowResizeHelperMac::~WindowResizeHelperMac() {}
313 PumpableTaskRunner* pumpable_task_runner =
314 reinterpret_cast<PumpableTaskRunner*>(task_runner_.get());
315 pumpable_task_runner->EnqueueAndPostWrappedTask(
316 FROM_HERE,
317 new WrappedTask(base::Bind(HandleRendererIPC, render_process_id, msg),
318 base::TimeDelta()),
319 base::TimeDelta());
320 }
321 311
322 void RenderWidgetResizeHelper::PostGpuProcessMsg(int gpu_host_id, 312 void WindowResizeHelperMac::EventTimedWait(base::WaitableEvent* event,
323 const IPC::Message& msg) { 313 base::TimeDelta delay) {
324 PumpableTaskRunner* pumpable_task_runner =
325 reinterpret_cast<PumpableTaskRunner*>(task_runner_.get());
326 pumpable_task_runner->EnqueueAndPostWrappedTask(
327 FROM_HERE, new WrappedTask(base::Bind(HandleGpuIPC, gpu_host_id, msg),
328 base::TimeDelta()),
329 base::TimeDelta());
330 }
331
332 RenderWidgetResizeHelper::RenderWidgetResizeHelper() {
333 task_runner_ = new PumpableTaskRunner(base::Bind(&EventTimedWait));
334 }
335
336 RenderWidgetResizeHelper::~RenderWidgetResizeHelper() {}
337
338 // static
339 void RenderWidgetResizeHelper::EventTimedWait(base::WaitableEvent* event,
340 base::TimeDelta delay) {
341 base::ThreadRestrictions::ScopedAllowWait allow_wait; 314 base::ThreadRestrictions::ScopedAllowWait allow_wait;
342 event->TimedWait(delay); 315 event->TimedWait(delay);
343 } 316 }
344 317
345 } // namespace content 318 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accelerated_widget_mac/window_resize_helper_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698