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

Side by Side Diff: mojo/skia/ganesh_context.cc

Issue 1687653003: Slightly improve recovery from losing GL context. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 10 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 | « mojo/skia/ganesh_context.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 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 "mojo/skia/ganesh_context.h" 5 #include "mojo/skia/ganesh_context.h"
6 6
7 #include "mojo/public/c/gpu/MGL/mgl.h" 7 #include "mojo/public/c/gpu/MGL/mgl.h"
8 #include "mojo/skia/gl_bindings_skia.h" 8 #include "mojo/skia/gl_bindings_skia.h"
9 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" 9 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
10 10
(...skipping 28 matching lines...) Expand all
39 } 39 }
40 40
41 GaneshContext::~GaneshContext() { 41 GaneshContext::~GaneshContext() {
42 if (gl_context_) 42 if (gl_context_)
43 gl_context_->RemoveObserver(this); 43 gl_context_->RemoveObserver(this);
44 44
45 ReleaseContext(); 45 ReleaseContext();
46 } 46 }
47 47
48 void GaneshContext::OnContextLost() { 48 void GaneshContext::OnContextLost() {
49 ReleaseContext(); 49 context_lost_ = true;
50 if (!scope_entered_)
51 ReleaseContext();
50 } 52 }
51 53
52 void GaneshContext::ReleaseContext() { 54 void GaneshContext::ReleaseContext() {
53 Scope(this); 55 Scope(this);
54 gr_context_->abandonContext(); 56 gr_context_->abandonContext();
55 gr_context_.clear(); 57 gr_context_.clear();
56 gl_context_.reset(); 58 gl_context_.reset();
57 } 59 }
58 60
59 void GaneshContext::EnterScope() { 61 void GaneshContext::EnterScope() {
60 CHECK(!scope_entered_); 62 CHECK(!scope_entered_);
61 scope_entered_ = true; 63 scope_entered_ = true;
62 64
63 if (gl_context_) { 65 if (gl_context_) {
64 previous_mgl_context_ = MGLGetCurrentContext(); 66 previous_mgl_context_ = MGLGetCurrentContext();
65 gl_context_->MakeCurrent(); 67 gl_context_->MakeCurrent();
66 68
67 // Reset the Ganesh context when entering its scope in case the caller 69 // Reset the Ganesh context when entering its scope in case the caller
68 // performed low-level GL operations which might interfere with Ganesh's 70 // performed low-level GL operations which might interfere with Ganesh's
69 // state expectations. 71 // state expectations.
70 if (gr_context_) 72 if (gr_context_)
71 gr_context_->resetContext(); 73 gr_context_->resetContext();
72 } 74 }
73 } 75 }
74 76
75 void GaneshContext::ExitScope() { 77 void GaneshContext::ExitScope() {
76 CHECK(scope_entered_); 78 CHECK(scope_entered_);
77 scope_entered_ = false; 79 scope_entered_ = false;
78 80
79 // Flush the Ganesh context when exiting its scope. 81 if (gl_context_) {
80 if (gr_context_) 82 // Flush the Ganesh context when exiting its scope.
81 gr_context_->flush(); 83 if (gr_context_)
84 gr_context_->flush();
82 85
83 MGLMakeCurrent(previous_mgl_context_); 86 MGLMakeCurrent(previous_mgl_context_);
84 previous_mgl_context_ = MGL_NO_CONTEXT; 87 previous_mgl_context_ = MGL_NO_CONTEXT;
88
89 if (context_lost_)
90 ReleaseContext();
91 }
85 } 92 }
86 93
87 } // namespace skia 94 } // namespace skia
88 } // namespace mojo 95 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/skia/ganesh_context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698