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

Unified Diff: ui/gl/gl_surface_ozone.cc

Issue 781683005: Ozone: Avoid blocking in Swapbuffer Call. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unintended changes. Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: ui/gl/gl_surface_ozone.cc
diff --git a/ui/gl/gl_surface_ozone.cc b/ui/gl/gl_surface_ozone.cc
index 67ab131b7a8c261905ca7fe5bc0a5aef855e2adb..374c71cff141d207d091070e6a7917fdf6ebaa57 100644
--- a/ui/gl/gl_surface_ozone.cc
+++ b/ui/gl/gl_surface_ozone.cc
@@ -4,8 +4,10 @@
#include "ui/gl/gl_surface.h"
+#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_image.h"
@@ -99,13 +101,18 @@ class GL_EXPORT GLSurfaceOzoneEGL : public NativeViewGLSurfaceEGL {
DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneEGL);
};
-class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL {
+class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL,
+ public base::SupportsWeakPtr<GLSurfaceOzoneSurfaceless> {
public:
GLSurfaceOzoneSurfaceless(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
AcceleratedWidget widget)
: SurfacelessEGL(gfx::Size()),
ozone_surface_(ozone_surface.Pass()),
- widget_(widget) {}
+ widget_(widget) {
+ ozone_surface_->SetPageFlipCompletionCallback(
+ base::Bind(&GLSurfaceOzoneSurfaceless::PageFlipCompleted,
+ this->AsWeakPtr()));
+ }
virtual bool Initialize() override {
if (!SurfacelessEGL::Initialize())
@@ -145,6 +152,16 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL {
return true;
}
+ void SetPageFlipCompletionCallback(
+ const PageFlipCompletionCallback& callback) override {
+ page_flip_completion_callback_ = callback;
+ }
+
+ void PageFlipCompleted() {
+ DCHECK(!page_flip_completion_callback_.is_null());
+ page_flip_completion_callback_.Run();
+ }
+
private:
virtual ~GLSurfaceOzoneSurfaceless() {
Destroy(); // EGL surface must be destroyed before SurfaceOzone
@@ -154,6 +171,7 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL {
scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_;
AcceleratedWidget widget_;
scoped_ptr<VSyncProvider> vsync_provider_;
+ PageFlipCompletionCallback page_flip_completion_callback_;
DISALLOW_COPY_AND_ASSIGN(GLSurfaceOzoneSurfaceless);
};

Powered by Google App Engine
This is Rietveld 408576698