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

Unified Diff: ui/gl/gl_surface_egl.cc

Issue 2302393002: Support swap damage rect using eglSwapBuffersWithDamageKHR (Closed)
Patch Set: Update GLSurfaceAdapter Created 4 years, 3 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/gl_surface_egl.cc
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 694129de07e26d2bfc4563fe8c2193ee395cf34f..9fb5082ebcf33221d19fc2785222294c8de13141 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -638,6 +638,7 @@ NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(EGLNativeWindowType window)
enable_fixed_size_angle_(false),
surface_(NULL),
supports_post_sub_buffer_(false),
+ supports_swap_buffer_with_damage_(false),
flips_vertically_(false),
swap_interval_(1) {
#if defined(OS_ANDROID)
@@ -730,6 +731,11 @@ bool NativeViewGLSurfaceEGL::Initialize(
supports_post_sub_buffer_ = (surfaceVal && retVal) == EGL_TRUE;
}
+ supports_swap_buffer_with_damage_ =
+ g_driver_egl.ext.b_EGL_KHR_swap_buffers_with_damage &&
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableSwapBuffersWithDamage);
+
if (sync_provider)
vsync_provider_.reset(sync_provider.release());
else if (g_egl_sync_control_supported)
@@ -869,6 +875,10 @@ EGLSurface NativeViewGLSurfaceEGL::GetHandle() {
return surface_;
}
+bool NativeViewGLSurfaceEGL::SupportsSwapBuffersWithDamage() {
+ return supports_swap_buffer_with_damage_;
+}
+
bool NativeViewGLSurfaceEGL::SupportsPostSubBuffer() {
return supports_post_sub_buffer_;
}
@@ -881,6 +891,32 @@ bool NativeViewGLSurfaceEGL::BuffersFlipped() const {
return g_use_direct_composition;
}
+gfx::SwapResult NativeViewGLSurfaceEGL::SwapBuffersWithDamage(int x,
+ int y,
+ int width,
+ int height) {
+ DCHECK(supports_swap_buffer_with_damage_);
+ UpdateSwapInterval();
+ if (!CommitAndClearPendingOverlays()) {
+ DVLOG(1) << "Failed to commit pending overlay planes.";
+ return gfx::SwapResult::SWAP_FAILED;
+ }
+ if (flips_vertically_) {
+ // With EGL_SURFACE_ORIENTATION_INVERT_Y_ANGLE the contents are rendered
+ // inverted, but the damage rectangle is still measured from the
+ // bottom left.
+ y = GetSize().height() - y - height;
+ }
+
+ EGLint damage_rect[4] = {x, y, width, height};
+ if (!eglSwapBuffersWithDamageKHR(GetDisplay(), surface_, damage_rect, 1)) {
+ DVLOG(1) << "eglSwapBuffersWithDamageKHR failed with error "
+ << GetLastEGLErrorString();
+ return gfx::SwapResult::SWAP_FAILED;
+ }
+ return gfx::SwapResult::SWAP_ACK;
+}
+
gfx::SwapResult NativeViewGLSurfaceEGL::PostSubBuffer(int x,
int y,
int width,
« 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