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

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

Issue 1538803004: Create child window in GPU process for DirectComposition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « ui/gl/gl_surface_egl.h ('k') | ui/gl/gl_switches.h » ('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_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 "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 EGLConfig g_config; 109 EGLConfig g_config;
110 EGLDisplay g_display; 110 EGLDisplay g_display;
111 EGLNativeDisplayType g_native_display; 111 EGLNativeDisplayType g_native_display;
112 112
113 const char* g_egl_extensions = NULL; 113 const char* g_egl_extensions = NULL;
114 bool g_egl_create_context_robustness_supported = false; 114 bool g_egl_create_context_robustness_supported = false;
115 bool g_egl_sync_control_supported = false; 115 bool g_egl_sync_control_supported = false;
116 bool g_egl_window_fixed_size_supported = false; 116 bool g_egl_window_fixed_size_supported = false;
117 bool g_egl_surfaceless_context_supported = false; 117 bool g_egl_surfaceless_context_supported = false;
118 bool g_egl_surface_orientation_supported = false; 118 bool g_egl_surface_orientation_supported = false;
119 bool g_use_direct_composition = false;
119 120
120 class EGLSyncControlVSyncProvider 121 class EGLSyncControlVSyncProvider
121 : public gfx::SyncControlVSyncProvider { 122 : public gfx::SyncControlVSyncProvider {
122 public: 123 public:
123 explicit EGLSyncControlVSyncProvider(EGLSurface surface) 124 explicit EGLSyncControlVSyncProvider(EGLSurface surface)
124 : SyncControlVSyncProvider(), 125 : SyncControlVSyncProvider(),
125 surface_(surface) { 126 surface_(surface) {
126 } 127 }
127 128
128 ~EGLSyncControlVSyncProvider() override {} 129 ~EGLSyncControlVSyncProvider() override {}
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 g_egl_extensions = eglQueryString(g_display, EGL_EXTENSIONS); 370 g_egl_extensions = eglQueryString(g_display, EGL_EXTENSIONS);
370 g_egl_create_context_robustness_supported = 371 g_egl_create_context_robustness_supported =
371 HasEGLExtension("EGL_EXT_create_context_robustness"); 372 HasEGLExtension("EGL_EXT_create_context_robustness");
372 g_egl_sync_control_supported = 373 g_egl_sync_control_supported =
373 HasEGLExtension("EGL_CHROMIUM_sync_control"); 374 HasEGLExtension("EGL_CHROMIUM_sync_control");
374 g_egl_window_fixed_size_supported = 375 g_egl_window_fixed_size_supported =
375 HasEGLExtension("EGL_ANGLE_window_fixed_size"); 376 HasEGLExtension("EGL_ANGLE_window_fixed_size");
376 g_egl_surface_orientation_supported = 377 g_egl_surface_orientation_supported =
377 HasEGLExtension("EGL_ANGLE_surface_orientation"); 378 HasEGLExtension("EGL_ANGLE_surface_orientation");
378 379
380 g_use_direct_composition = base::CommandLine::ForCurrentProcess()->HasSwitch(
381 switches::kUseDirectComposition);
382
379 // TODO(oetuaho@nvidia.com): Surfaceless is disabled on Android as a temporary 383 // TODO(oetuaho@nvidia.com): Surfaceless is disabled on Android as a temporary
380 // workaround, since code written for Android WebView takes different paths 384 // workaround, since code written for Android WebView takes different paths
381 // based on whether GL surface objects have underlying EGL surface handles, 385 // based on whether GL surface objects have underlying EGL surface handles,
382 // conflicting with the use of surfaceless. See https://crbug.com/382349 386 // conflicting with the use of surfaceless. See https://crbug.com/382349
383 #if defined(OS_ANDROID) 387 #if defined(OS_ANDROID)
384 DCHECK(!g_egl_surfaceless_context_supported); 388 DCHECK(!g_egl_surfaceless_context_supported);
385 #else 389 #else
386 // Check if SurfacelessEGL is supported. 390 // Check if SurfacelessEGL is supported.
387 g_egl_surfaceless_context_supported = 391 g_egl_surfaceless_context_supported =
388 HasEGLExtension("EGL_KHR_surfaceless_context"); 392 HasEGLExtension("EGL_KHR_surfaceless_context");
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 } 435 }
432 436
433 bool GLSurfaceEGL::IsCreateContextRobustnessSupported() { 437 bool GLSurfaceEGL::IsCreateContextRobustnessSupported() {
434 return g_egl_create_context_robustness_supported; 438 return g_egl_create_context_robustness_supported;
435 } 439 }
436 440
437 bool GLSurfaceEGL::IsEGLSurfacelessContextSupported() { 441 bool GLSurfaceEGL::IsEGLSurfacelessContextSupported() {
438 return g_egl_surfaceless_context_supported; 442 return g_egl_surfaceless_context_supported;
439 } 443 }
440 444
445 bool GLSurfaceEGL::IsDirectCompositionSupported() {
446 return g_use_direct_composition;
447 }
448
441 GLSurfaceEGL::~GLSurfaceEGL() {} 449 GLSurfaceEGL::~GLSurfaceEGL() {}
442 450
443 // InitializeDisplay is necessary because the static binding code 451 // InitializeDisplay is necessary because the static binding code
444 // needs a full Display init before it can query the Display extensions. 452 // needs a full Display init before it can query the Display extensions.
445 // static 453 // static
446 EGLDisplay GLSurfaceEGL::InitializeDisplay() { 454 EGLDisplay GLSurfaceEGL::InitializeDisplay() {
447 if (g_display != EGL_NO_DISPLAY) { 455 if (g_display != EGL_NO_DISPLAY) {
448 return g_display; 456 return g_display;
449 } 457 }
450 458
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 } 501 }
494 } 502 }
495 503
496 return g_display; 504 return g_display;
497 } 505 }
498 506
499 NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(EGLNativeWindowType window) 507 NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(EGLNativeWindowType window)
500 : window_(window), 508 : window_(window),
501 config_(NULL), 509 config_(NULL),
502 size_(1, 1), 510 size_(1, 1),
511 alpha_(true),
512 enable_fixed_size_angle_(false),
503 surface_(NULL), 513 surface_(NULL),
504 supports_post_sub_buffer_(false), 514 supports_post_sub_buffer_(false),
505 alpha_(true),
506 flips_vertically_(false), 515 flips_vertically_(false),
507 swap_interval_(1) { 516 swap_interval_(1) {
508 #if defined(OS_ANDROID) 517 #if defined(OS_ANDROID)
509 if (window) 518 if (window)
510 ANativeWindow_acquire(window); 519 ANativeWindow_acquire(window);
511 #endif 520 #endif
512 521
513 #if defined(OS_WIN) 522 #if defined(OS_WIN)
514 vsync_override_ = false; 523 vsync_override_ = false;
515 swap_generation_ = 0; 524 swap_generation_ = 0;
(...skipping 18 matching lines...) Expand all
534 543
535 // We need to make sure that window_ is correctly initialized with all 544 // We need to make sure that window_ is correctly initialized with all
536 // the platform-dependant quirks, if any, before creating the surface. 545 // the platform-dependant quirks, if any, before creating the surface.
537 if (!InitializeNativeWindow()) { 546 if (!InitializeNativeWindow()) {
538 LOG(ERROR) << "Error trying to initialize the native window."; 547 LOG(ERROR) << "Error trying to initialize the native window.";
539 return false; 548 return false;
540 } 549 }
541 550
542 std::vector<EGLint> egl_window_attributes; 551 std::vector<EGLint> egl_window_attributes;
543 552
544 if (g_egl_window_fixed_size_supported) { 553 if (g_egl_window_fixed_size_supported && enable_fixed_size_angle_) {
545 egl_window_attributes.push_back(EGL_FIXED_SIZE_ANGLE); 554 egl_window_attributes.push_back(EGL_FIXED_SIZE_ANGLE);
546 egl_window_attributes.push_back(EGL_TRUE); 555 egl_window_attributes.push_back(EGL_TRUE);
547 egl_window_attributes.push_back(EGL_WIDTH); 556 egl_window_attributes.push_back(EGL_WIDTH);
548 egl_window_attributes.push_back(size_.width()); 557 egl_window_attributes.push_back(size_.width());
549 egl_window_attributes.push_back(EGL_HEIGHT); 558 egl_window_attributes.push_back(EGL_HEIGHT);
550 egl_window_attributes.push_back(size_.height()); 559 egl_window_attributes.push_back(size_.height());
551 } 560 }
552 561
553 if (gfx::g_driver_egl.ext.b_EGL_NV_post_sub_buffer) { 562 if (gfx::g_driver_egl.ext.b_EGL_NV_post_sub_buffer) {
554 egl_window_attributes.push_back(EGL_POST_SUB_BUFFER_SUPPORTED_NV); 563 egl_window_attributes.push_back(EGL_POST_SUB_BUFFER_SUPPORTED_NV);
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 } 994 }
986 995
987 void* SurfacelessEGL::GetShareHandle() { 996 void* SurfacelessEGL::GetShareHandle() {
988 return NULL; 997 return NULL;
989 } 998 }
990 999
991 SurfacelessEGL::~SurfacelessEGL() { 1000 SurfacelessEGL::~SurfacelessEGL() {
992 } 1001 }
993 1002
994 } // namespace gfx 1003 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_egl.h ('k') | ui/gl/gl_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698