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

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

Issue 2188063002: Update vsync override in PostSubBuffers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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') | no next file » | 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 <map> 10 #include <map>
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 << GetLastEGLErrorString(); 739 << GetLastEGLErrorString();
740 } 740 }
741 surface_ = NULL; 741 surface_ = NULL;
742 } 742 }
743 } 743 }
744 744
745 bool NativeViewGLSurfaceEGL::IsOffscreen() { 745 bool NativeViewGLSurfaceEGL::IsOffscreen() {
746 return false; 746 return false;
747 } 747 }
748 748
749 gfx::SwapResult NativeViewGLSurfaceEGL::SwapBuffers() { 749 void NativeViewGLSurfaceEGL::UpdateSwapInterval() {
750 TRACE_EVENT2("gpu", "NativeViewGLSurfaceEGL:RealSwapBuffers",
751 "width", GetSize().width(),
752 "height", GetSize().height());
753
754 #if defined(OS_WIN) 750 #if defined(OS_WIN)
755 if (swap_interval_ != 0) { 751 if (swap_interval_ != 0) {
756 // This code is a simple way of enforcing that we only vsync if one surface 752 // This code is a simple way of enforcing that we only vsync if one surface
757 // is swapping per frame. This provides single window cases a stable refresh 753 // is swapping per frame. This provides single window cases a stable refresh
758 // while allowing multi-window cases to not slow down due to multiple syncs 754 // while allowing multi-window cases to not slow down due to multiple syncs
759 // on a single thread. A better way to fix this problem would be to have 755 // on a single thread. A better way to fix this problem would be to have
760 // each surface present on its own thread. 756 // each surface present on its own thread.
761 757
762 if (current_swap_generation_ == swap_generation_) { 758 if (current_swap_generation_ == swap_generation_) {
763 if (swaps_this_generation_ > 1) 759 if (swaps_this_generation_ > 1)
(...skipping 14 matching lines...) Expand all
778 } 774 }
779 } else if (vsync_override_) { 775 } else if (vsync_override_) {
780 // Only one window swapping, so let the normal vsync setting take over 776 // Only one window swapping, so let the normal vsync setting take over
781 eglSwapInterval(GetDisplay(), swap_interval_); 777 eglSwapInterval(GetDisplay(), swap_interval_);
782 vsync_override_ = false; 778 vsync_override_ = false;
783 } 779 }
784 780
785 swaps_this_generation_++; 781 swaps_this_generation_++;
786 } 782 }
787 #endif 783 #endif
784 }
785
786 gfx::SwapResult NativeViewGLSurfaceEGL::SwapBuffers() {
787 TRACE_EVENT2("gpu", "NativeViewGLSurfaceEGL:RealSwapBuffers",
788 "width", GetSize().width(),
789 "height", GetSize().height());
790
791 UpdateSwapInterval();
788 792
789 if (!CommitAndClearPendingOverlays()) { 793 if (!CommitAndClearPendingOverlays()) {
790 DVLOG(1) << "Failed to commit pending overlay planes."; 794 DVLOG(1) << "Failed to commit pending overlay planes.";
791 return gfx::SwapResult::SWAP_FAILED; 795 return gfx::SwapResult::SWAP_FAILED;
792 } 796 }
793 797
794 if (!eglSwapBuffers(GetDisplay(), surface_)) { 798 if (!eglSwapBuffers(GetDisplay(), surface_)) {
795 DVLOG(1) << "eglSwapBuffers failed with error " 799 DVLOG(1) << "eglSwapBuffers failed with error "
796 << GetLastEGLErrorString(); 800 << GetLastEGLErrorString();
797 return gfx::SwapResult::SWAP_FAILED; 801 return gfx::SwapResult::SWAP_FAILED;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 868
865 bool NativeViewGLSurfaceEGL::BuffersFlipped() const { 869 bool NativeViewGLSurfaceEGL::BuffersFlipped() const {
866 return g_use_direct_composition; 870 return g_use_direct_composition;
867 } 871 }
868 872
869 gfx::SwapResult NativeViewGLSurfaceEGL::PostSubBuffer(int x, 873 gfx::SwapResult NativeViewGLSurfaceEGL::PostSubBuffer(int x,
870 int y, 874 int y,
871 int width, 875 int width,
872 int height) { 876 int height) {
873 DCHECK(supports_post_sub_buffer_); 877 DCHECK(supports_post_sub_buffer_);
878 UpdateSwapInterval();
874 if (!CommitAndClearPendingOverlays()) { 879 if (!CommitAndClearPendingOverlays()) {
875 DVLOG(1) << "Failed to commit pending overlay planes."; 880 DVLOG(1) << "Failed to commit pending overlay planes.";
876 return gfx::SwapResult::SWAP_FAILED; 881 return gfx::SwapResult::SWAP_FAILED;
877 } 882 }
878 if (flips_vertically_) { 883 if (flips_vertically_) {
879 // With EGL_SURFACE_ORIENTATION_INVERT_Y_ANGLE the contents are rendered 884 // With EGL_SURFACE_ORIENTATION_INVERT_Y_ANGLE the contents are rendered
880 // inverted, but the PostSubBuffer rectangle is still measured from the 885 // inverted, but the PostSubBuffer rectangle is still measured from the
881 // bottom left. 886 // bottom left.
882 y = GetSize().height() - y - height; 887 y = GetSize().height() - y - height;
883 } 888 }
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 } 1144 }
1140 1145
1141 void* SurfacelessEGL::GetShareHandle() { 1146 void* SurfacelessEGL::GetShareHandle() {
1142 return NULL; 1147 return NULL;
1143 } 1148 }
1144 1149
1145 SurfacelessEGL::~SurfacelessEGL() { 1150 SurfacelessEGL::~SurfacelessEGL() {
1146 } 1151 }
1147 1152
1148 } // namespace gl 1153 } // namespace gl
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_egl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698