OLD | NEW |
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_egl.h" | 5 #include "ui/gl/gl_surface_egl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "ui/gfx/geometry/rect.h" | 24 #include "ui/gfx/geometry/rect.h" |
25 #include "ui/gl/angle_platform_impl.h" | 25 #include "ui/gl/angle_platform_impl.h" |
26 #include "ui/gl/egl_util.h" | 26 #include "ui/gl/egl_util.h" |
27 #include "ui/gl/gl_context.h" | 27 #include "ui/gl/gl_context.h" |
28 #include "ui/gl/gl_context_egl.h" | 28 #include "ui/gl/gl_context_egl.h" |
29 #include "ui/gl/gl_image.h" | 29 #include "ui/gl/gl_image.h" |
30 #include "ui/gl/gl_implementation.h" | 30 #include "ui/gl/gl_implementation.h" |
31 #include "ui/gl/gl_surface_stub.h" | 31 #include "ui/gl/gl_surface_stub.h" |
32 #include "ui/gl/gl_switches.h" | 32 #include "ui/gl/gl_switches.h" |
33 #include "ui/gl/scoped_make_current.h" | 33 #include "ui/gl/scoped_make_current.h" |
| 34 #include "ui/gl/sync_control_vsync_provider.h" |
34 | 35 |
35 #if defined(USE_X11) && !defined(OS_CHROMEOS) | 36 #if defined(USE_X11) && !defined(OS_CHROMEOS) |
36 extern "C" { | 37 extern "C" { |
37 #include <X11/Xlib.h> | 38 #include <X11/Xlib.h> |
38 #define Status int | 39 #define Status int |
39 } | 40 } |
40 #include "ui/base/x/x11_util_internal.h" // nogncheck | 41 #include "ui/base/x/x11_util_internal.h" // nogncheck |
41 #endif | 42 #endif |
42 | 43 |
43 #if defined(OS_ANDROID) | 44 #if defined(OS_ANDROID) |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 const char* g_egl_extensions = nullptr; | 130 const char* g_egl_extensions = nullptr; |
130 bool g_egl_create_context_robustness_supported = false; | 131 bool g_egl_create_context_robustness_supported = false; |
131 bool g_egl_create_context_bind_generates_resource_supported = false; | 132 bool g_egl_create_context_bind_generates_resource_supported = false; |
132 bool g_egl_create_context_webgl_compatability_supported = false; | 133 bool g_egl_create_context_webgl_compatability_supported = false; |
133 bool g_egl_sync_control_supported = false; | 134 bool g_egl_sync_control_supported = false; |
134 bool g_egl_window_fixed_size_supported = false; | 135 bool g_egl_window_fixed_size_supported = false; |
135 bool g_egl_surfaceless_context_supported = false; | 136 bool g_egl_surfaceless_context_supported = false; |
136 bool g_egl_surface_orientation_supported = false; | 137 bool g_egl_surface_orientation_supported = false; |
137 bool g_use_direct_composition = false; | 138 bool g_use_direct_composition = false; |
138 | 139 |
| 140 class EGLSyncControlVSyncProvider : public SyncControlVSyncProvider { |
| 141 public: |
| 142 explicit EGLSyncControlVSyncProvider(EGLSurface surface) |
| 143 : SyncControlVSyncProvider(), |
| 144 surface_(surface) { |
| 145 } |
| 146 |
| 147 ~EGLSyncControlVSyncProvider() override {} |
| 148 |
| 149 protected: |
| 150 bool GetSyncValues(int64_t* system_time, |
| 151 int64_t* media_stream_counter, |
| 152 int64_t* swap_buffer_counter) override { |
| 153 uint64_t u_system_time, u_media_stream_counter, u_swap_buffer_counter; |
| 154 bool result = eglGetSyncValuesCHROMIUM( |
| 155 g_display, surface_, &u_system_time, |
| 156 &u_media_stream_counter, &u_swap_buffer_counter) == EGL_TRUE; |
| 157 if (result) { |
| 158 *system_time = static_cast<int64_t>(u_system_time); |
| 159 *media_stream_counter = static_cast<int64_t>(u_media_stream_counter); |
| 160 *swap_buffer_counter = static_cast<int64_t>(u_swap_buffer_counter); |
| 161 } |
| 162 return result; |
| 163 } |
| 164 |
| 165 bool GetMscRate(int32_t* numerator, int32_t* denominator) override { |
| 166 return false; |
| 167 } |
| 168 |
| 169 private: |
| 170 EGLSurface surface_; |
| 171 |
| 172 DISALLOW_COPY_AND_ASSIGN(EGLSyncControlVSyncProvider); |
| 173 }; |
| 174 |
139 EGLDisplay GetPlatformANGLEDisplay(EGLNativeDisplayType native_display, | 175 EGLDisplay GetPlatformANGLEDisplay(EGLNativeDisplayType native_display, |
140 EGLenum platform_type, | 176 EGLenum platform_type, |
141 bool warpDevice) { | 177 bool warpDevice) { |
142 std::vector<EGLint> display_attribs; | 178 std::vector<EGLint> display_attribs; |
143 | 179 |
144 display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); | 180 display_attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); |
145 display_attribs.push_back(platform_type); | 181 display_attribs.push_back(platform_type); |
146 | 182 |
147 if (warpDevice) { | 183 if (warpDevice) { |
148 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); | 184 display_attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 } | 460 } |
425 } | 461 } |
426 | 462 |
427 // If no displays are available due to missing angle extensions or invalid | 463 // If no displays are available due to missing angle extensions or invalid |
428 // flags, request the default display. | 464 // flags, request the default display. |
429 if (init_displays->empty()) { | 465 if (init_displays->empty()) { |
430 init_displays->push_back(DEFAULT); | 466 init_displays->push_back(DEFAULT); |
431 } | 467 } |
432 } | 468 } |
433 | 469 |
434 EGLSyncControlVSyncProvider::EGLSyncControlVSyncProvider(EGLSurface surface) | |
435 : SyncControlVSyncProvider(), surface_(surface) {} | |
436 | |
437 EGLSyncControlVSyncProvider::~EGLSyncControlVSyncProvider() {} | |
438 | |
439 bool EGLSyncControlVSyncProvider::GetSyncValues(int64_t* system_time, | |
440 int64_t* media_stream_counter, | |
441 int64_t* swap_buffer_counter) { | |
442 uint64_t u_system_time, u_media_stream_counter, u_swap_buffer_counter; | |
443 bool result = eglGetSyncValuesCHROMIUM(g_display, surface_, &u_system_time, | |
444 &u_media_stream_counter, | |
445 &u_swap_buffer_counter) == EGL_TRUE; | |
446 if (result) { | |
447 *system_time = static_cast<int64_t>(u_system_time); | |
448 *media_stream_counter = static_cast<int64_t>(u_media_stream_counter); | |
449 *swap_buffer_counter = static_cast<int64_t>(u_swap_buffer_counter); | |
450 } | |
451 return result; | |
452 } | |
453 | |
454 bool EGLSyncControlVSyncProvider::GetMscRate(int32_t* numerator, | |
455 int32_t* denominator) { | |
456 return false; | |
457 } | |
458 | |
459 GLSurfaceEGL::GLSurfaceEGL() {} | 470 GLSurfaceEGL::GLSurfaceEGL() {} |
460 | 471 |
461 GLSurfaceFormat GLSurfaceEGL::GetFormat() { | 472 GLSurfaceFormat GLSurfaceEGL::GetFormat() { |
462 return format_; | 473 return format_; |
463 } | 474 } |
464 | 475 |
465 EGLDisplay GLSurfaceEGL::GetDisplay() { | 476 EGLDisplay GLSurfaceEGL::GetDisplay() { |
466 return g_display; | 477 return g_display; |
467 } | 478 } |
468 | 479 |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1216 } | 1227 } |
1217 | 1228 |
1218 void* SurfacelessEGL::GetShareHandle() { | 1229 void* SurfacelessEGL::GetShareHandle() { |
1219 return NULL; | 1230 return NULL; |
1220 } | 1231 } |
1221 | 1232 |
1222 SurfacelessEGL::~SurfacelessEGL() { | 1233 SurfacelessEGL::~SurfacelessEGL() { |
1223 } | 1234 } |
1224 | 1235 |
1225 } // namespace gl | 1236 } // namespace gl |
OLD | NEW |