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

Side by Side Diff: ui/gl/gl_surface_glx.cc

Issue 1998723002: Move code in ui/gl/* from gfx:: to gl:: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 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/gl/gl_surface_glx.h ('k') | ui/gl/gl_surface_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/gl/gl_surface_glx.h" 5 #include "ui/gl/gl_surface_glx.h"
6 6
7 extern "C" { 7 extern "C" {
8 #include <X11/Xlib.h> 8 #include <X11/Xlib.h>
9 } 9 }
10 #include <memory> 10 #include <memory>
(...skipping 12 matching lines...) Expand all
23 #include "base/time/time.h" 23 #include "base/time/time.h"
24 #include "base/trace_event/trace_event.h" 24 #include "base/trace_event/trace_event.h"
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "ui/events/platform/platform_event_source.h" 26 #include "ui/events/platform/platform_event_source.h"
27 #include "ui/gfx/x/x11_connection.h" 27 #include "ui/gfx/x/x11_connection.h"
28 #include "ui/gfx/x/x11_types.h" 28 #include "ui/gfx/x/x11_types.h"
29 #include "ui/gl/gl_bindings.h" 29 #include "ui/gl/gl_bindings.h"
30 #include "ui/gl/gl_implementation.h" 30 #include "ui/gl/gl_implementation.h"
31 #include "ui/gl/sync_control_vsync_provider.h" 31 #include "ui/gl/sync_control_vsync_provider.h"
32 32
33 namespace gfx { 33 namespace gl {
34 34
35 namespace { 35 namespace {
36 36
37 Display* g_display = nullptr; 37 Display* g_display = nullptr;
38 bool g_glx_context_create = false; 38 bool g_glx_context_create = false;
39 bool g_glx_create_context_robustness_supported = false; 39 bool g_glx_create_context_robustness_supported = false;
40 bool g_glx_texture_from_pixmap_supported = false; 40 bool g_glx_texture_from_pixmap_supported = false;
41 bool g_glx_oml_sync_control_supported = false; 41 bool g_glx_oml_sync_control_supported = false;
42 42
43 // Track support of glXGetMscRateOML separately from GLX_OML_sync_control as a 43 // Track support of glXGetMscRateOML separately from GLX_OML_sync_control as a
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 found = true; 108 found = true;
109 break; 109 break;
110 } 110 }
111 } 111 }
112 if (found) { 112 if (found) {
113 return configs.get()[i]; 113 return configs.get()[i];
114 } 114 }
115 return nullptr; 115 return nullptr;
116 } 116 }
117 117
118 class OMLSyncControlVSyncProvider 118 class OMLSyncControlVSyncProvider : public gl::SyncControlVSyncProvider {
119 : public gfx::SyncControlVSyncProvider {
120 public: 119 public:
121 explicit OMLSyncControlVSyncProvider(GLXWindow glx_window) 120 explicit OMLSyncControlVSyncProvider(GLXWindow glx_window)
122 : SyncControlVSyncProvider(), 121 : SyncControlVSyncProvider(),
123 glx_window_(glx_window) { 122 glx_window_(glx_window) {
124 } 123 }
125 124
126 ~OMLSyncControlVSyncProvider() override {} 125 ~OMLSyncControlVSyncProvider() override {}
127 126
128 protected: 127 protected:
129 bool GetSyncValues(int64_t* system_time, 128 bool GetSyncValues(int64_t* system_time,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 215
217 void Initialize() { 216 void Initialize() {
218 DCHECK(display_); 217 DCHECK(display_);
219 218
220 context_ = 219 context_ =
221 glXCreateNewContext(display_, config_, GLX_RGBA_TYPE, nullptr, True); 220 glXCreateNewContext(display_, config_, GLX_RGBA_TYPE, nullptr, True);
222 221
223 DCHECK(nullptr != context_); 222 DCHECK(nullptr != context_);
224 } 223 }
225 224
226 void GetVSyncParameters(const VSyncProvider::UpdateVSyncCallback& callback) { 225 void GetVSyncParameters(
226 const gfx::VSyncProvider::UpdateVSyncCallback& callback) {
227 base::TimeTicks now; 227 base::TimeTicks now;
228 { 228 {
229 // Don't allow |window_| destruction while we're probing vsync. 229 // Don't allow |window_| destruction while we're probing vsync.
230 base::AutoLock locked(vsync_lock_); 230 base::AutoLock locked(vsync_lock_);
231 231
232 if (!context_ || cancel_vsync_flag_.IsSet()) 232 if (!context_ || cancel_vsync_flag_.IsSet())
233 return; 233 return;
234 234
235 glXMakeContextCurrent(display_, glx_window_, glx_window_, context_); 235 glXMakeContextCurrent(display_, glx_window_, glx_window_, context_);
236 236
(...skipping 10 matching lines...) Expand all
247 const base::TimeDelta kDefaultInterval = 247 const base::TimeDelta kDefaultInterval =
248 base::TimeDelta::FromSeconds(1) / 60; 248 base::TimeDelta::FromSeconds(1) / 60;
249 249
250 task_runner_->PostTask( 250 task_runner_->PostTask(
251 FROM_HERE, base::Bind(callback, now, kDefaultInterval)); 251 FROM_HERE, base::Bind(callback, now, kDefaultInterval));
252 } 252 }
253 253
254 private: 254 private:
255 // For initialization of display_ in GLSurface::InitializeOneOff before 255 // For initialization of display_ in GLSurface::InitializeOneOff before
256 // the sandbox goes up. 256 // the sandbox goes up.
257 friend class gfx::GLSurfaceGLX; 257 friend class gl::GLSurfaceGLX;
258 258
259 static Display* display_; 259 static Display* display_;
260 260
261 GLXFBConfig config_; 261 GLXFBConfig config_;
262 GLXWindow glx_window_; 262 GLXWindow glx_window_;
263 GLXContext context_; 263 GLXContext context_;
264 264
265 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 265 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
266 266
267 base::CancellationFlag cancel_vsync_flag_; 267 base::CancellationFlag cancel_vsync_flag_;
(...skipping 23 matching lines...) Expand all
291 cancel_vsync_flag_->Set(); 291 cancel_vsync_flag_->Set();
292 } 292 }
293 293
294 // Hand-off |shim_| to be deleted on the |vsync_thread_|. 294 // Hand-off |shim_| to be deleted on the |vsync_thread_|.
295 vsync_thread_->message_loop()->DeleteSoon( 295 vsync_thread_->message_loop()->DeleteSoon(
296 FROM_HERE, 296 FROM_HERE,
297 shim_.release()); 297 shim_.release());
298 } 298 }
299 299
300 void GetVSyncParameters( 300 void GetVSyncParameters(
301 const VSyncProvider::UpdateVSyncCallback& callback) override { 301 const gfx::VSyncProvider::UpdateVSyncCallback& callback) override {
302 if (kGetVSyncParametersMinSeconds > 0) { 302 if (kGetVSyncParametersMinSeconds > 0) {
303 base::TimeTicks now = base::TimeTicks::Now(); 303 base::TimeTicks now = base::TimeTicks::Now();
304 base::TimeDelta delta = now - last_get_vsync_parameters_time_; 304 base::TimeDelta delta = now - last_get_vsync_parameters_time_;
305 if (delta.InSeconds() < kGetVSyncParametersMinSeconds) 305 if (delta.InSeconds() < kGetVSyncParametersMinSeconds)
306 return; 306 return;
307 last_get_vsync_parameters_time_ = now; 307 last_get_vsync_parameters_time_ = now;
308 } 308 }
309 309
310 // Only one outstanding request per surface. 310 // Only one outstanding request per surface.
311 if (!pending_callback_) { 311 if (!pending_callback_) {
312 pending_callback_.reset( 312 pending_callback_.reset(
313 new VSyncProvider::UpdateVSyncCallback(callback)); 313 new gfx::VSyncProvider::UpdateVSyncCallback(callback));
314 vsync_thread_->message_loop()->PostTask( 314 vsync_thread_->message_loop()->PostTask(
315 FROM_HERE, 315 FROM_HERE,
316 base::Bind(&SGIVideoSyncProviderThreadShim::GetVSyncParameters, 316 base::Bind(&SGIVideoSyncProviderThreadShim::GetVSyncParameters,
317 base::Unretained(shim_.get()), 317 base::Unretained(shim_.get()),
318 base::Bind( 318 base::Bind(
319 &SGIVideoSyncVSyncProvider::PendingCallbackRunner, 319 &SGIVideoSyncVSyncProvider::PendingCallbackRunner,
320 AsWeakPtr()))); 320 AsWeakPtr())));
321 } 321 }
322 } 322 }
323 323
324 private: 324 private:
325 void PendingCallbackRunner(const base::TimeTicks timebase, 325 void PendingCallbackRunner(const base::TimeTicks timebase,
326 const base::TimeDelta interval) { 326 const base::TimeDelta interval) {
327 DCHECK(pending_callback_); 327 DCHECK(pending_callback_);
328 pending_callback_->Run(timebase, interval); 328 pending_callback_->Run(timebase, interval);
329 pending_callback_.reset(); 329 pending_callback_.reset();
330 } 330 }
331 331
332 scoped_refptr<SGIVideoSyncThread> vsync_thread_; 332 scoped_refptr<SGIVideoSyncThread> vsync_thread_;
333 333
334 // Thread shim through which the sync provider is accessed on |vsync_thread_|. 334 // Thread shim through which the sync provider is accessed on |vsync_thread_|.
335 std::unique_ptr<SGIVideoSyncProviderThreadShim> shim_; 335 std::unique_ptr<SGIVideoSyncProviderThreadShim> shim_;
336 336
337 std::unique_ptr<VSyncProvider::UpdateVSyncCallback> pending_callback_; 337 std::unique_ptr<gfx::VSyncProvider::UpdateVSyncCallback> pending_callback_;
338 338
339 // Raw pointers to sync primitives owned by the shim_. 339 // Raw pointers to sync primitives owned by the shim_.
340 // These will only be referenced before we post a task to destroy 340 // These will only be referenced before we post a task to destroy
341 // the shim_, so they are safe to access. 341 // the shim_, so they are safe to access.
342 base::CancellationFlag* cancel_vsync_flag_; 342 base::CancellationFlag* cancel_vsync_flag_;
343 base::Lock* vsync_lock_; 343 base::Lock* vsync_lock_;
344 344
345 base::TimeTicks last_get_vsync_parameters_time_; 345 base::TimeTicks last_get_vsync_parameters_time_;
346 346
347 DISALLOW_COPY_AND_ASSIGN(SGIVideoSyncVSyncProvider); 347 DISALLOW_COPY_AND_ASSIGN(SGIVideoSyncVSyncProvider);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 547
548 gfx::Size NativeViewGLSurfaceGLX::GetSize() { 548 gfx::Size NativeViewGLSurfaceGLX::GetSize() {
549 return size_; 549 return size_;
550 } 550 }
551 551
552 void* NativeViewGLSurfaceGLX::GetHandle() { 552 void* NativeViewGLSurfaceGLX::GetHandle() {
553 return reinterpret_cast<void*>(GetDrawableHandle()); 553 return reinterpret_cast<void*>(GetDrawableHandle());
554 } 554 }
555 555
556 bool NativeViewGLSurfaceGLX::SupportsPostSubBuffer() { 556 bool NativeViewGLSurfaceGLX::SupportsPostSubBuffer() {
557 return gfx::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer; 557 return gl::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer;
558 } 558 }
559 559
560 void* NativeViewGLSurfaceGLX::GetConfig() { 560 void* NativeViewGLSurfaceGLX::GetConfig() {
561 if (!config_) 561 if (!config_)
562 config_ = GetConfigForWindow(g_display, window_); 562 config_ = GetConfigForWindow(g_display, window_);
563 return config_; 563 return config_;
564 } 564 }
565 565
566 gfx::SwapResult NativeViewGLSurfaceGLX::PostSubBuffer(int x, 566 gfx::SwapResult NativeViewGLSurfaceGLX::PostSubBuffer(int x,
567 int y, 567 int y,
568 int width, 568 int width,
569 int height) { 569 int height) {
570 DCHECK(gfx::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer); 570 DCHECK(gl::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer);
571 glXCopySubBufferMESA(g_display, GetDrawableHandle(), x, y, width, height); 571 glXCopySubBufferMESA(g_display, GetDrawableHandle(), x, y, width, height);
572 return gfx::SwapResult::SWAP_ACK; 572 return gfx::SwapResult::SWAP_ACK;
573 } 573 }
574 574
575 VSyncProvider* NativeViewGLSurfaceGLX::GetVSyncProvider() { 575 gfx::VSyncProvider* NativeViewGLSurfaceGLX::GetVSyncProvider() {
576 return vsync_provider_.get(); 576 return vsync_provider_.get();
577 } 577 }
578 578
579 NativeViewGLSurfaceGLX::~NativeViewGLSurfaceGLX() { 579 NativeViewGLSurfaceGLX::~NativeViewGLSurfaceGLX() {
580 Destroy(); 580 Destroy();
581 } 581 }
582 582
583 UnmappedNativeViewGLSurfaceGLX::UnmappedNativeViewGLSurfaceGLX( 583 UnmappedNativeViewGLSurfaceGLX::UnmappedNativeViewGLSurfaceGLX(
584 const gfx::Size& size) 584 const gfx::Size& size)
585 : size_(size), config_(nullptr), window_(0), glx_window_(0) { 585 : size_(size), config_(nullptr), window_(0), glx_window_(0) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 void* UnmappedNativeViewGLSurfaceGLX::GetConfig() { 638 void* UnmappedNativeViewGLSurfaceGLX::GetConfig() {
639 if (!config_) 639 if (!config_)
640 config_ = GetConfigForWindow(g_display, window_); 640 config_ = GetConfigForWindow(g_display, window_);
641 return config_; 641 return config_;
642 } 642 }
643 643
644 UnmappedNativeViewGLSurfaceGLX::~UnmappedNativeViewGLSurfaceGLX() { 644 UnmappedNativeViewGLSurfaceGLX::~UnmappedNativeViewGLSurfaceGLX() {
645 Destroy(); 645 Destroy();
646 } 646 }
647 647
648 } // namespace gfx 648 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_glx.h ('k') | ui/gl/gl_surface_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698