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

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

Issue 1167533007: Revert of ozone: Remove singleton pattern for SurfaceFactoryOzone. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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_egl.cc ('k') | ui/ozone/demo/software_renderer.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 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/gl/gl_surface.h" 5 #include "ui/gl/gl_surface.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/threading/worker_pool.h" 14 #include "base/threading/worker_pool.h"
15 #include "ui/gfx/native_widget_types.h" 15 #include "ui/gfx/native_widget_types.h"
16 #include "ui/gl/gl_context.h" 16 #include "ui/gl/gl_context.h"
17 #include "ui/gl/gl_image.h" 17 #include "ui/gl/gl_image.h"
18 #include "ui/gl/gl_image_linux_dma_buffer.h" 18 #include "ui/gl/gl_image_linux_dma_buffer.h"
19 #include "ui/gl/gl_implementation.h" 19 #include "ui/gl/gl_implementation.h"
20 #include "ui/gl/gl_surface_egl.h" 20 #include "ui/gl/gl_surface_egl.h"
21 #include "ui/gl/gl_surface_osmesa.h" 21 #include "ui/gl/gl_surface_osmesa.h"
22 #include "ui/gl/gl_surface_stub.h" 22 #include "ui/gl/gl_surface_stub.h"
23 #include "ui/gl/scoped_binders.h" 23 #include "ui/gl/scoped_binders.h"
24 #include "ui/gl/scoped_make_current.h" 24 #include "ui/gl/scoped_make_current.h"
25 #include "ui/ozone/public/native_pixmap.h" 25 #include "ui/ozone/public/native_pixmap.h"
26 #include "ui/ozone/public/ozone_platform.h"
27 #include "ui/ozone/public/surface_factory_ozone.h" 26 #include "ui/ozone/public/surface_factory_ozone.h"
28 #include "ui/ozone/public/surface_ozone_egl.h" 27 #include "ui/ozone/public/surface_ozone_egl.h"
29 28
30 namespace gfx { 29 namespace gfx {
31 30
32 namespace { 31 namespace {
33 32
34 void WaitForFence(EGLDisplay display, EGLSyncKHR fence) { 33 void WaitForFence(EGLDisplay display, EGLSyncKHR fence) {
35 eglClientWaitSyncKHR(display, fence, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, 34 eglClientWaitSyncKHR(display, fence, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR,
36 EGL_FOREVER_KHR); 35 EGL_FOREVER_KHR);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 111
113 bool GLSurfaceOzoneEGL::ReinitializeNativeSurface() { 112 bool GLSurfaceOzoneEGL::ReinitializeNativeSurface() {
114 scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current; 113 scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current;
115 GLContext* current_context = GLContext::GetCurrent(); 114 GLContext* current_context = GLContext::GetCurrent();
116 bool was_current = current_context && current_context->IsCurrent(this); 115 bool was_current = current_context && current_context->IsCurrent(this);
117 if (was_current) { 116 if (was_current) {
118 scoped_make_current.reset(new ui::ScopedMakeCurrent(current_context, this)); 117 scoped_make_current.reset(new ui::ScopedMakeCurrent(current_context, this));
119 } 118 }
120 119
121 Destroy(); 120 Destroy();
122 ozone_surface_ = ui::OzonePlatform::GetInstance() 121 ozone_surface_ = ui::SurfaceFactoryOzone::GetInstance()
123 ->GetSurfaceFactoryOzone()
124 ->CreateEGLSurfaceForWidget(widget_) 122 ->CreateEGLSurfaceForWidget(widget_)
125 .Pass(); 123 .Pass();
126 if (!ozone_surface_) { 124 if (!ozone_surface_) {
127 LOG(ERROR) << "Failed to create native surface."; 125 LOG(ERROR) << "Failed to create native surface.";
128 return false; 126 return false;
129 } 127 }
130 128
131 window_ = ozone_surface_->GetNativeWindow(); 129 window_ = ozone_surface_->GetNativeWindow();
132 if (!Initialize()) { 130 if (!Initialize()) {
133 LOG(ERROR) << "Failed to initialize."; 131 LOG(ERROR) << "Failed to initialize.";
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 return false; 471 return false;
474 pixmap_ = pixmap; 472 pixmap_ = pixmap;
475 return true; 473 return true;
476 } 474 }
477 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::ScheduleOverlayPlane( 475 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::ScheduleOverlayPlane(
478 gfx::AcceleratedWidget widget, 476 gfx::AcceleratedWidget widget,
479 int z_order, 477 int z_order,
480 gfx::OverlayTransform transform, 478 gfx::OverlayTransform transform,
481 const gfx::Rect& bounds_rect, 479 const gfx::Rect& bounds_rect,
482 const gfx::RectF& crop_rect) { 480 const gfx::RectF& crop_rect) {
483 return ui::OzonePlatform::GetInstance() 481 return ui::SurfaceFactoryOzone::GetInstance()->ScheduleOverlayPlane(
484 ->GetSurfaceFactoryOzone() 482 widget, z_order, transform, pixmap_, bounds_rect, crop_rect);
485 ->ScheduleOverlayPlane(widget, z_order, transform, pixmap_, bounds_rect,
486 crop_rect);
487 } 483 }
488 484
489 GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::~SurfaceImage() { 485 GLSurfaceOzoneSurfacelessSurfaceImpl::SurfaceImage::~SurfaceImage() {
490 } 486 }
491 487
492 GLSurfaceOzoneSurfacelessSurfaceImpl::GLSurfaceOzoneSurfacelessSurfaceImpl( 488 GLSurfaceOzoneSurfacelessSurfaceImpl::GLSurfaceOzoneSurfacelessSurfaceImpl(
493 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface, 489 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
494 AcceleratedWidget widget) 490 AcceleratedWidget widget)
495 : GLSurfaceOzoneSurfaceless(ozone_surface.Pass(), widget), 491 : GLSurfaceOzoneSurfaceless(ozone_surface.Pass(), widget),
496 fbo_(0), 492 fbo_(0),
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 ScopedFrameBufferBinder fb(fbo_); 577 ScopedFrameBufferBinder fb(fbo_);
582 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 578 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
583 textures_[current_surface_], 0); 579 textures_[current_surface_], 0);
584 } 580 }
585 581
586 bool GLSurfaceOzoneSurfacelessSurfaceImpl::CreatePixmaps() { 582 bool GLSurfaceOzoneSurfacelessSurfaceImpl::CreatePixmaps() {
587 if (!fbo_) 583 if (!fbo_)
588 return true; 584 return true;
589 for (size_t i = 0; i < arraysize(textures_); i++) { 585 for (size_t i = 0; i < arraysize(textures_); i++) {
590 scoped_refptr<ui::NativePixmap> pixmap = 586 scoped_refptr<ui::NativePixmap> pixmap =
591 ui::OzonePlatform::GetInstance() 587 ui::SurfaceFactoryOzone::GetInstance()->CreateNativePixmap(
592 ->GetSurfaceFactoryOzone() 588 widget_, GetSize(), ui::SurfaceFactoryOzone::BGRA_8888,
593 ->CreateNativePixmap(widget_, GetSize(), 589 ui::SurfaceFactoryOzone::SCANOUT);
594 ui::SurfaceFactoryOzone::BGRA_8888,
595 ui::SurfaceFactoryOzone::SCANOUT);
596 if (!pixmap) 590 if (!pixmap)
597 return false; 591 return false;
598 scoped_refptr<SurfaceImage> image = 592 scoped_refptr<SurfaceImage> image =
599 new SurfaceImage(GetSize(), GL_BGRA_EXT); 593 new SurfaceImage(GetSize(), GL_BGRA_EXT);
600 if (!image->Initialize(pixmap, gfx::GpuMemoryBuffer::Format::BGRA_8888)) 594 if (!image->Initialize(pixmap, gfx::GpuMemoryBuffer::Format::BGRA_8888))
601 return false; 595 return false;
602 images_[i] = image; 596 images_[i] = image;
603 // Bind image to texture. 597 // Bind image to texture.
604 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]); 598 ScopedTextureBinder binder(GL_TEXTURE_2D, textures_[i]);
605 if (!images_[i]->BindTexImage(GL_TEXTURE_2D)) 599 if (!images_[i]->BindTexImage(GL_TEXTURE_2D))
(...skipping 21 matching lines...) Expand all
627 return false; 621 return false;
628 } 622 }
629 } 623 }
630 624
631 // static 625 // static
632 scoped_refptr<GLSurface> GLSurface::CreateSurfacelessViewGLSurface( 626 scoped_refptr<GLSurface> GLSurface::CreateSurfacelessViewGLSurface(
633 gfx::AcceleratedWidget window) { 627 gfx::AcceleratedWidget window) {
634 if (GetGLImplementation() == kGLImplementationEGLGLES2 && 628 if (GetGLImplementation() == kGLImplementationEGLGLES2 &&
635 window != kNullAcceleratedWidget && 629 window != kNullAcceleratedWidget &&
636 GLSurfaceEGL::IsEGLSurfacelessContextSupported() && 630 GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
637 ui::OzonePlatform::GetInstance() 631 ui::SurfaceFactoryOzone::GetInstance()->CanShowPrimaryPlaneAsOverlay()) {
638 ->GetSurfaceFactoryOzone()
639 ->CanShowPrimaryPlaneAsOverlay()) {
640 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone = 632 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone =
641 ui::OzonePlatform::GetInstance() 633 ui::SurfaceFactoryOzone::GetInstance()
642 ->GetSurfaceFactoryOzone()
643 ->CreateSurfacelessEGLSurfaceForWidget(window); 634 ->CreateSurfacelessEGLSurfaceForWidget(window);
644 if (!surface_ozone) 635 if (!surface_ozone)
645 return nullptr; 636 return nullptr;
646 scoped_refptr<GLSurface> surface; 637 scoped_refptr<GLSurface> surface;
647 surface = new GLSurfaceOzoneSurfaceless(surface_ozone.Pass(), window); 638 surface = new GLSurfaceOzoneSurfaceless(surface_ozone.Pass(), window);
648 if (surface->Initialize()) 639 if (surface->Initialize())
649 return surface; 640 return surface;
650 } 641 }
651 642
652 return nullptr; 643 return nullptr;
653 } 644 }
654 645
655 // static 646 // static
656 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface( 647 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface(
657 gfx::AcceleratedWidget window) { 648 gfx::AcceleratedWidget window) {
658 if (GetGLImplementation() == kGLImplementationOSMesaGL) { 649 if (GetGLImplementation() == kGLImplementationOSMesaGL) {
659 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless()); 650 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless());
660 if (!surface->Initialize()) 651 if (!surface->Initialize())
661 return NULL; 652 return NULL;
662 return surface; 653 return surface;
663 } 654 }
664 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2); 655 DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
665 if (window != kNullAcceleratedWidget) { 656 if (window != kNullAcceleratedWidget) {
666 scoped_refptr<GLSurface> surface; 657 scoped_refptr<GLSurface> surface;
667 if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() && 658 if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
668 ui::OzonePlatform::GetInstance() 659 ui::SurfaceFactoryOzone::GetInstance()
669 ->GetSurfaceFactoryOzone()
670 ->CanShowPrimaryPlaneAsOverlay()) { 660 ->CanShowPrimaryPlaneAsOverlay()) {
671 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone = 661 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone =
672 ui::OzonePlatform::GetInstance() 662 ui::SurfaceFactoryOzone::GetInstance()
673 ->GetSurfaceFactoryOzone()
674 ->CreateSurfacelessEGLSurfaceForWidget(window); 663 ->CreateSurfacelessEGLSurfaceForWidget(window);
675 if (!surface_ozone) 664 if (!surface_ozone)
676 return NULL; 665 return NULL;
677 surface = new GLSurfaceOzoneSurfacelessSurfaceImpl(surface_ozone.Pass(), 666 surface = new GLSurfaceOzoneSurfacelessSurfaceImpl(surface_ozone.Pass(),
678 window); 667 window);
679 } else { 668 } else {
680 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone = 669 scoped_ptr<ui::SurfaceOzoneEGL> surface_ozone =
681 ui::OzonePlatform::GetInstance() 670 ui::SurfaceFactoryOzone::GetInstance()->CreateEGLSurfaceForWidget(
682 ->GetSurfaceFactoryOzone() 671 window);
683 ->CreateEGLSurfaceForWidget(window);
684 if (!surface_ozone) 672 if (!surface_ozone)
685 return NULL; 673 return NULL;
686 674
687 surface = new GLSurfaceOzoneEGL(surface_ozone.Pass(), window); 675 surface = new GLSurfaceOzoneEGL(surface_ozone.Pass(), window);
688 } 676 }
689 if (!surface->Initialize()) 677 if (!surface->Initialize())
690 return NULL; 678 return NULL;
691 return surface; 679 return surface;
692 } else { 680 } else {
693 scoped_refptr<GLSurface> surface = new GLSurfaceStub(); 681 scoped_refptr<GLSurface> surface = new GLSurfaceStub();
(...skipping 29 matching lines...) Expand all
723 } 711 }
724 case kGLImplementationMockGL: 712 case kGLImplementationMockGL:
725 return new GLSurfaceStub; 713 return new GLSurfaceStub;
726 default: 714 default:
727 NOTREACHED(); 715 NOTREACHED();
728 return NULL; 716 return NULL;
729 } 717 }
730 } 718 }
731 719
732 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { 720 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() {
733 return ui::OzonePlatform::GetInstance() 721 return ui::SurfaceFactoryOzone::GetInstance()->GetNativeDisplay();
734 ->GetSurfaceFactoryOzone()
735 ->GetNativeDisplay();
736 } 722 }
737 723
738 } // namespace gfx 724 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_egl.cc ('k') | ui/ozone/demo/software_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698