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

Side by Side Diff: ui/ozone/platform/dri/dri_gpu_platform_support.cc

Issue 856423002: [Ozone-Dri] Decouple the IO helper thread from DriWrapper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gbm-wrapper
Patch Set: . Created 5 years, 11 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/ozone/platform/dri/dri_gpu_platform_support.h" 5 #include "ui/ozone/platform/dri/dri_gpu_platform_support.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/thread_task_runner_handle.h" 8 #include "base/thread_task_runner_handle.h"
9 #include "ipc/ipc_message_macros.h" 9 #include "ipc/ipc_message_macros.h"
10 #include "ui/display/types/display_mode.h" 10 #include "ui/display/types/display_mode.h"
11 #include "ui/display/types/display_snapshot.h" 11 #include "ui/display/types/display_snapshot.h"
12 #include "ui/ozone/common/display_util.h" 12 #include "ui/ozone/common/display_util.h"
13 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h" 13 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
14 #include "ui/ozone/common/gpu/ozone_gpu_messages.h" 14 #include "ui/ozone/common/gpu/ozone_gpu_messages.h"
15 #include "ui/ozone/platform/dri/dri_helper_thread.h"
15 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" 16 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h"
16 #include "ui/ozone/platform/dri/dri_window_delegate_manager.h" 17 #include "ui/ozone/platform/dri/dri_window_delegate_manager.h"
17 #include "ui/ozone/platform/dri/native_display_delegate_dri.h" 18 #include "ui/ozone/platform/dri/native_display_delegate_dri.h"
18 19
19 namespace ui { 20 namespace ui {
20 21
21 namespace { 22 namespace {
22 23
23 void MessageProcessedOnMain( 24 void MessageProcessedOnMain(
24 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, 25 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner,
25 const base::Closure& io_thread_task) { 26 const base::Closure& io_thread_task) {
26 io_thread_task_runner->PostTask(FROM_HERE, io_thread_task); 27 io_thread_task_runner->PostTask(FROM_HERE, io_thread_task);
27 } 28 }
28 29
29 class DriGpuPlatformSupportMessageFilter : public IPC::MessageFilter { 30 class DriGpuPlatformSupportMessageFilter : public IPC::MessageFilter {
30 public: 31 public:
31 DriGpuPlatformSupportMessageFilter(DriWindowDelegateManager* window_manager, 32 DriGpuPlatformSupportMessageFilter(DriWindowDelegateManager* window_manager,
33 DriHelperThread* helper_thread,
32 IPC::Listener* main_thread_listener) 34 IPC::Listener* main_thread_listener)
33 : window_manager_(window_manager), 35 : window_manager_(window_manager),
36 helper_thread_(helper_thread),
34 main_thread_listener_(main_thread_listener), 37 main_thread_listener_(main_thread_listener),
35 main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), 38 main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
36 pending_main_thread_operations_(0), 39 pending_main_thread_operations_(0),
37 cursor_animating_(false), 40 cursor_animating_(false),
38 start_on_main_(true) {} 41 start_on_main_(true) {}
39 42
40 void OnFilterAdded(IPC::Sender* sender) override { 43 void OnFilterAdded(IPC::Sender* sender) override {
41 io_thread_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 44 io_thread_task_runner_ = base::ThreadTaskRunnerHandle::Get();
45 if (helper_thread_)
alexst (slow to review) 2015/01/22 23:09:24 So it occurred to me, we shouldn't be passing the
dnicoara 2015/01/23 17:13:06 Done. I've moved the helper thread in here and In
46 helper_thread_->Initialize();
42 } 47 }
43 48
44 // This code is meant to be very temporary and only as a special case to fix 49 // This code is meant to be very temporary and only as a special case to fix
45 // cursor movement jank resulting from slowdowns on the gpu main thread. 50 // cursor movement jank resulting from slowdowns on the gpu main thread.
46 // It handles cursor movement on IO thread when display config is stable 51 // It handles cursor movement on IO thread when display config is stable
47 // and returns it to main thread during transitions. 52 // and returns it to main thread during transitions.
48 bool OnMessageReceived(const IPC::Message& message) override { 53 bool OnMessageReceived(const IPC::Message& message) override {
49 // If this message affects the state needed to set cursor, handle it on 54 // If this message affects the state needed to set cursor, handle it on
50 // the main thread. If a cursor move message arrives but we haven't 55 // the main thread. If a cursor move message arrives but we haven't
51 // processed the previous main thread message, keep processing on main 56 // processed the previous main thread message, keep processing on main
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 146
142 OzoneGpuMsg_CursorSet::Param param; 147 OzoneGpuMsg_CursorSet::Param param;
143 if (!OzoneGpuMsg_CursorSet::Read(&message, &param)) 148 if (!OzoneGpuMsg_CursorSet::Read(&message, &param))
144 return; 149 return;
145 150
146 int frame_delay_ms = get<3>(param); 151 int frame_delay_ms = get<3>(param);
147 cursor_animating_ = frame_delay_ms != 0; 152 cursor_animating_ = frame_delay_ms != 0;
148 } 153 }
149 154
150 DriWindowDelegateManager* window_manager_; 155 DriWindowDelegateManager* window_manager_;
156 DriHelperThread* helper_thread_;
151 IPC::Listener* main_thread_listener_; 157 IPC::Listener* main_thread_listener_;
152 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; 158 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
153 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner_; 159 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner_;
154 int32 pending_main_thread_operations_; 160 int32 pending_main_thread_operations_;
155 bool cursor_animating_; 161 bool cursor_animating_;
156 // The filter is not installed early enough, so some messages may 162 // The filter is not installed early enough, so some messages may
157 // get routed to main thread. Once we get our first message on io, send it 163 // get routed to main thread. Once we get our first message on io, send it
158 // to main to ensure all prior main thread operations are finished before we 164 // to main to ensure all prior main thread operations are finished before we
159 // continue on io. 165 // continue on io.
160 // TODO: remove this once filter is properly installed. 166 // TODO: remove this once filter is properly installed.
161 bool start_on_main_; 167 bool start_on_main_;
162 }; 168 };
163 } 169 }
164 170
165 DriGpuPlatformSupport::DriGpuPlatformSupport( 171 DriGpuPlatformSupport::DriGpuPlatformSupport(
166 DriWrapper* drm, 172 DriWrapper* drm,
167 DriWindowDelegateManager* window_manager, 173 DriWindowDelegateManager* window_manager,
168 ScreenManager* screen_manager, 174 ScreenManager* screen_manager,
175 DriHelperThread* helper_thread,
169 scoped_ptr<NativeDisplayDelegateDri> ndd) 176 scoped_ptr<NativeDisplayDelegateDri> ndd)
170 : sender_(NULL), 177 : sender_(NULL),
171 drm_(drm), 178 drm_(drm),
172 window_manager_(window_manager), 179 window_manager_(window_manager),
173 screen_manager_(screen_manager), 180 screen_manager_(screen_manager),
174 ndd_(ndd.Pass()) { 181 ndd_(ndd.Pass()) {
175 filter_ = new DriGpuPlatformSupportMessageFilter(window_manager, this); 182 filter_ = new DriGpuPlatformSupportMessageFilter(window_manager,
183 helper_thread, this);
176 } 184 }
177 185
178 DriGpuPlatformSupport::~DriGpuPlatformSupport() { 186 DriGpuPlatformSupport::~DriGpuPlatformSupport() {
179 } 187 }
180 188
181 void DriGpuPlatformSupport::AddHandler(scoped_ptr<GpuPlatformSupport> handler) { 189 void DriGpuPlatformSupport::AddHandler(scoped_ptr<GpuPlatformSupport> handler) {
182 handlers_.push_back(handler.release()); 190 handlers_.push_back(handler.release());
183 } 191 }
184 192
185 void DriGpuPlatformSupport::OnChannelEstablished(IPC::Sender* sender) { 193 void DriGpuPlatformSupport::OnChannelEstablished(IPC::Sender* sender) {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 void DriGpuPlatformSupport::RelinquishGpuResources( 360 void DriGpuPlatformSupport::RelinquishGpuResources(
353 const base::Closure& callback) { 361 const base::Closure& callback) {
354 callback.Run(); 362 callback.Run();
355 } 363 }
356 364
357 IPC::MessageFilter* DriGpuPlatformSupport::GetMessageFilter() { 365 IPC::MessageFilter* DriGpuPlatformSupport::GetMessageFilter() {
358 return filter_.get(); 366 return filter_.get();
359 } 367 }
360 368
361 } // namespace ui 369 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/dri_gpu_platform_support.h ('k') | ui/ozone/platform/dri/dri_helper_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698