New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 598667 link

Starred by 1 user

Issue metadata

Status: Available
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 3
Type: Feature



Sign in to add a comment

The command_buffer_gles2 library does not support asynchronous command buffer mode

Project Member Reported by kkinnu...@nvidia.com, Mar 29 2016

Issue description

Currently command_buffer_gles2 library uses command buffer in the mode where the real OpenGL calls are made in the same thread as the command buffer OpenGL calls.
 
It would be useful to let Skia use test command buffer in a mode which would be more closer to the real Chrome usage pattern.

In particular, doing performance profiling of Skia using command_buffer_gles2 library does not really uncover any of the same performance problems as running Chrome.

Either (or both) would be useful:
1) in-process command buffer with threads separating the client and service
2) process-separated command buffer with client and service in different processes

 
 
Cc: zmo@chromium.org piman@chromium.org
zmo@, piman@:
How realistic would it be in your opinion for us to implement this? Is it not implemented at the moment because it's not needed, or is it regarded as too complex non-goal to do?

Do you have any thought on how this could be done? In terms of high-level strategy of what components should be included?

The amount of different command buffer -related components is quite high. Would you be able to suggest few classes that need to be there or places to look at code that achieves similar thing? Any help would be appreciated.

Our current thinking is that threaded version might be easier to start with. In the integrated version, the library could expose a CHROMIUM EGL extension that the client would use to select the mode of operation. The default would default to current operation, so that the existing tests would work as they work today.
 
The current problem is that lot of the asynchronous versions of command buffer classes are implemented in "content". Linking to these is not that easy, since the current default .gyp/.gn link targets bring in huge amount of code.

A problem related to process -variant of the task is running the separate process. The chromium process launching infrastructure can probably not be used in this scenario, as the code seems to launch the main executable (maybe in this "zygote" mode), where as of course in command_buffer_gles2 mode the executable is not part of the system. Maybe fork could work in limited scenarios, maybe it is too complex.


Comment 2 by piman@chromium.org, Mar 29 2016

GLInProcessContext/InProcessCommandBuffer has support for running the service side in a separate thread (and that's the default, actually, if you pass NULL as the service to GLInProcessContext::Create). It doesn't depend on content - see e.g. ui/compositor/test/in_process_context_provider.cc which creates one for tests.

Comment 3 by piman@chromium.org, Mar 29 2016

Cc: fsam...@chromium.org
For the out-of-process scenario, TBH it's a lot of work to replicate a bunch of the content infrastructure, I'm not sure it will give you a good bang for buck. A lot of the out-of-process issues also have to do with the sandbox, so you'd need to wire that up too.

That being said, we are refactoring a bunch of the content/ infrastructure (ipc etc.) for gpu to not depend on content - see the bug tree starting at https://bugs.chromium.org/p/chromium/issues/detail?id=586364 .

Comment 4 Deleted

Comment 5 Deleted

Labels: -Needs-Feedback
Status: Assigned (was: Untriaged)
Cc: kkinnu...@nvidia.com
Owner: ----
Status: Available (was: Assigned)
Currently we are not actively working on the feature, unassigning.

Sign in to add a comment