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

Side by Side Diff: webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java

Issue 2339573002: Android SurfaceViewRenderer: Create EGL context on render thread (Closed)
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « no previous file | 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 /* 1 /*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvent s) { 138 EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvent s) {
139 init(sharedContext, rendererEvents, EglBase.CONFIG_PLAIN, new GlRectDrawer() ); 139 init(sharedContext, rendererEvents, EglBase.CONFIG_PLAIN, new GlRectDrawer() );
140 } 140 }
141 141
142 /** 142 /**
143 * Initialize this class, sharing resources with |sharedContext|. The custom | drawer| will be used 143 * Initialize this class, sharing resources with |sharedContext|. The custom | drawer| will be used
144 * for drawing frames on the EGLSurface. This class is responsible for calling release() on 144 * for drawing frames on the EGLSurface. This class is responsible for calling release() on
145 * |drawer|. It is allowed to call init() to reinitialize the renderer after a previous 145 * |drawer|. It is allowed to call init() to reinitialize the renderer after a previous
146 * init()/release() cycle. 146 * init()/release() cycle.
147 */ 147 */
148 public void init(EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvents, 148 public void init(
149 int[] configAttributes, RendererCommon.GlDrawer drawer) { 149 final EglBase.Context sharedContext, RendererCommon.RendererEvents rendere rEvents,
150 final int[] configAttributes, RendererCommon.GlDrawer drawer) {
150 synchronized (handlerLock) { 151 synchronized (handlerLock) {
151 if (renderThreadHandler != null) { 152 if (renderThreadHandler != null) {
152 throw new IllegalStateException(getResourceName() + "Already initialized "); 153 throw new IllegalStateException(getResourceName() + "Already initialized ");
153 } 154 }
154 Logging.d(TAG, getResourceName() + "Initializing."); 155 Logging.d(TAG, getResourceName() + "Initializing.");
155 this.rendererEvents = rendererEvents; 156 this.rendererEvents = rendererEvents;
156 this.drawer = drawer; 157 this.drawer = drawer;
157 renderThread = new HandlerThread(TAG); 158 renderThread = new HandlerThread(TAG);
158 renderThread.start(); 159 renderThread.start();
159 eglBase = EglBase.create(sharedContext, configAttributes);
160 renderThreadHandler = new Handler(renderThread.getLooper()); 160 renderThreadHandler = new Handler(renderThread.getLooper());
161 // Create EGL context on the newly created render thread. It should be pos sibly to create the
162 // context on this thread and make it current on the render thread, but th is causes failure on
163 // some Marvel based JB devices.
perkj_webrtc 2016/09/14 07:02:05 nit: link comment to bug.
magjed_webrtc 2016/09/14 07:50:00 Done.
164 ThreadUtils.invokeAtFrontUninterruptibly(renderThreadHandler, new Runnable () {
sakal 2016/09/14 07:10:05 Invoking is safer but do we need to do that? I thi
magjed_webrtc 2016/09/14 07:50:00 I'm worried about release() being called immediate
165 @Override
166 public void run() {
167 eglBase = EglBase.create(sharedContext, configAttributes);
perkj_webrtc 2016/09/14 07:02:05 ok- so previously we created it on this thread and
magjed_webrtc 2016/09/14 07:50:00 Yes, which should be fine according to the documen
168 }
169 });
161 } 170 }
162 tryCreateEglSurface(); 171 tryCreateEglSurface();
163 } 172 }
164 173
165 /** 174 /**
166 * Create and make an EGLSurface current if both init() and surfaceCreated() h ave been called. 175 * Create and make an EGLSurface current if both init() and surfaceCreated() h ave been called.
167 */ 176 */
168 public void tryCreateEglSurface() { 177 public void tryCreateEglSurface() {
169 // |renderThreadHandler| is only created after |eglBase| is created in init( ), so the 178 // |renderThreadHandler| is only created after |eglBase| is created in init( ), so the
170 // following code will only execute if eglBase != null. 179 // following code will only execute if eglBase != null.
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 if (framesReceived > 0 && framesRendered > 0) { 571 if (framesReceived > 0 && framesRendered > 0) {
563 final long timeSinceFirstFrameNs = System.nanoTime() - firstFrameTimeNs; 572 final long timeSinceFirstFrameNs = System.nanoTime() - firstFrameTimeNs;
564 Logging.d(TAG, getResourceName() + "Duration: " + (int) (timeSinceFirstF rameNs / 1e6) + 573 Logging.d(TAG, getResourceName() + "Duration: " + (int) (timeSinceFirstF rameNs / 1e6) +
565 " ms. FPS: " + framesRendered * 1e9 / timeSinceFirstFrameNs); 574 " ms. FPS: " + framesRendered * 1e9 / timeSinceFirstFrameNs);
566 Logging.d(TAG, getResourceName() + "Average render time: " 575 Logging.d(TAG, getResourceName() + "Average render time: "
567 + (int) (renderTimeNs / (1000 * framesRendered)) + " us."); 576 + (int) (renderTimeNs / (1000 * framesRendered)) + " us.");
568 } 577 }
569 } 578 }
570 } 579 }
571 } 580 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698