|
|
Chromium Code Reviews
DescriptionAdd logic to GLRenderer to support RenderPassDrawQuad copying.
If the overlay processor emits a CALayerOverlay with a valid render_pass_id
member, then the GLRenderer needs to copy the contents of the render pass to an
overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse
overlay resources.
BUG=581526
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel
Committed: https://crrev.com/31df088c9aa21cada253b2e17dca1ff383697975
Cr-Commit-Position: refs/heads/master@{#407647}
Patch Set 1 #Patch Set 2 : Rebase. #Patch Set 3 : Clean up. #
Total comments: 10
Patch Set 4 : Comments from ccameron #Patch Set 5 : Cleanup. #
Total comments: 10
Patch Set 6 : Comments from ccameron. #Patch Set 7 : Comments from ccameron. #Patch Set 8 : Clean up. #
Total comments: 2
Patch Set 9 : Rebase. #Patch Set 10 : Construct the resource pool on demand. #
Messages
Total messages: 72 (48 generated)
Description was changed from ========== Add interface and implementation for RenderPassDrawQuadCopier BUG= ========== to ========== Add interface and implementation for RenderPassDrawQuadCopier BUG= CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ==========
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: ios-device on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-device/builds...) ios-device-gn on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-device-gn/bui...) ios-simulator on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-simulator/bui...) ios-simulator-gn on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-simulator-gn/...)
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Description was changed from ========== Add interface and implementation for RenderPassDrawQuadCopier BUG= CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ========== to ========== Add interface and implementation for RenderPassDrawQuadCopier. GLRenderer implements RenderPassDrawQuadCopier, an interface exposed by CALayerOverlay to give it the capability of copying a RenderPassDrawQuad ot an IOSurface. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ==========
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
erikchen@chromium.org changed reviewers: + ccameron@chromium.org
ccameron: Please review.
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
On 2016/07/19 22:59:37, erikchen wrote: > ccameron: Please review. Running out now, will grab this in the evening.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Bunch of comments, but they all fall into the following broad categories: 1. The "do the copy to a new texture" part should be done outside of the overlay processor. The overlay processor can output render pass IDs, which a later phase (possibly as late as inside GLRenderer::ScheduleCALayers) can use to do copies. I'd suggest not having a separate "copier" object (just have it be a part of GLRenderer). Few motivations for this: 1A. The "allocate texture and copy to it" part should almost-never fail, and when it does, drawing blank is totally acceptable (we do that in other parts of the compositor). This isn't the same sort of failure as "couldn't produce overlays". 1B. Allowing a CALayerOverlay to specify a render pass id instead of a resource id is pretty natural -- I would like to allow a CALayerOverlay to specify the backbuffer as well (at present, we do the backbuffer as a CAOverlayPlane, and we do all of the partial swap nonsense there -- I look forward to killing that part off). 1C. Doing the copy at a later phase keeps the overlay computation as being a fairly stateless "planning" phase, followed by a later execution phase. 2. Nit: "IOSurface" shouldn't be part of the language in cc -- I'd just say "OverlayResource", or something to that effect. 3. You may want to consider using a cc::ResourcePool for your resource pool. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... File cc/output/ca_layer_overlay.h (right): https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:42: I'd advocate just stuffing the CopyRenderPassDrawQuadToIOSurface method into cc::DirectRenderer directly. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:51: virtual void ReleaseIOSurfaces(const std::vector<ResourceId>& resources) = 0; ReleaseIOSurfaces appears only to be called from within GLRenderer (here and in https://codereview.chromium.org/2164613003/) -- let's keep it out of the interface. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:54: virtual void UpdateCopyCountForFrame(size_t count) = 0; This appears only to be called in testing code. Can it go? https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:66: I think this would be easier if we had an enum for type that took on values - SOLID_COLOR - RESOURCE - RENDER_PASS - FRAMEBUFFER (this one doesn't exist yet, but should in the future) https://codereview.chromium.org/2162193002/diff/40001/cc/output/gl_renderer.h File cc/output/gl_renderer.h (right): https://codereview.chromium.org/2162193002/diff/40001/cc/output/gl_renderer.h... cc/output/gl_renderer.h:540: // Keep an LRU buffer of GMB resources to encourage reuse. Can we use/augment the existing cc::ResourcePool::CreateForGpuMemoryBufferResources instead? [Also, I'd be a fan of doing IOSurface reuse in the GPU process, or something like that, but that's a discussion for another day].
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Description was changed from ========== Add interface and implementation for RenderPassDrawQuadCopier. GLRenderer implements RenderPassDrawQuadCopier, an interface exposed by CALayerOverlay to give it the capability of copying a RenderPassDrawQuad ot an IOSurface. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ========== to ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ==========
Description was changed from ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ========== to ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ==========
ccameron: PTAL https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... File cc/output/ca_layer_overlay.h (right): https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:42: On 2016/07/20 05:32:19, ccameron wrote: > I'd advocate just stuffing the CopyRenderPassDrawQuadToIOSurface method into > cc::DirectRenderer directly. Done. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:51: virtual void ReleaseIOSurfaces(const std::vector<ResourceId>& resources) = 0; On 2016/07/20 05:32:19, ccameron wrote: > ReleaseIOSurfaces appears only to be called from within GLRenderer (here and in > https://codereview.chromium.org/2164613003/) -- let's keep it out of the > interface. Done. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:54: virtual void UpdateCopyCountForFrame(size_t count) = 0; On 2016/07/20 05:32:19, ccameron wrote: > This appears only to be called in testing code. Can it go? Done. https://codereview.chromium.org/2162193002/diff/40001/cc/output/ca_layer_over... cc/output/ca_layer_overlay.h:66: On 2016/07/20 05:32:19, ccameron wrote: > I think this would be easier if we had an enum for type that took on values > - SOLID_COLOR > - RESOURCE > - RENDER_PASS > - FRAMEBUFFER (this one doesn't exist yet, but should in the future) Hm. I'm not sure how much that helps, since the command buffer doesn't handle polymorphism very well. https://codereview.chromium.org/2162193002/diff/40001/cc/output/gl_renderer.h File cc/output/gl_renderer.h (right): https://codereview.chromium.org/2162193002/diff/40001/cc/output/gl_renderer.h... cc/output/gl_renderer.h:540: // Keep an LRU buffer of GMB resources to encourage reuse. On 2016/07/20 05:32:19, ccameron wrote: > Can we use/augment the existing > cc::ResourcePool::CreateForGpuMemoryBufferResources instead? > > [Also, I'd be a fan of doing IOSurface reuse in the GPU process, or something > like that, but that's a discussion for another day]. Done.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: ios-device on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-device/builds...) ios-device-gn on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-device-gn/bui...) ios-simulator on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-simulator/bui...) ios-simulator-gn on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-simulator-gn/...)
lg -- just suggest removing the ResourcePool changes (and allowing its taskrunner to be optional). https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.cc File cc/output/gl_renderer.cc (right): https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3719: swapped_and_acked_overlay_resources_.erase(it); (from gl_renderer.h) ... We can just check for resource_id in overlay_pool_resources_in_use_, and release it back to the pool if we find it. https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.h File cc/output/gl_renderer.h (right): https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.h... cc/output/gl_renderer.h:537: std::unique_ptr<ResourcePool> overlay_resource_pool_; I'd add a std::map<ResourceId, Resource*> overlay_pool_resources_in_use_ and then ... (cut to gl_render.cc) https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... File cc/resources/resource_pool.cc (right): https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... cc/resources/resource_pool.cc:358: task_runner_->PostDelayedTask(FROM_HERE, |task_runner_| isn't optional, but I would suggest making it optional -- for your use-case, posting tasks doesn't seem worth doing the plumbing. https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... File cc/resources/resource_pool.h (right): https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... cc/resources/resource_pool.h:59: void ReleaseResource(ResourceId resource_id); [These changes then end up not being needed] It's true, it's bizarre that we have ResourceId, ScopedResource, and Resource ... should be cleaned up sometime.
ccameron: PTAL https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.cc File cc/output/gl_renderer.cc (right): https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3719: swapped_and_acked_overlay_resources_.erase(it); On 2016/07/20 22:13:53, ccameron wrote: > (from gl_renderer.h) ... > > We can just check for resource_id in overlay_pool_resources_in_use_, and release > it back to the pool if we find it. I don't think that's a great idea. We'd be maintaining a copy of the member |in_use_resources_| of resource pool, using separate logic, just so that we could check whether a given resource is in the data structure. https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... File cc/resources/resource_pool.cc (right): https://codereview.chromium.org/2162193002/diff/80001/cc/resources/resource_p... cc/resources/resource_pool.cc:358: task_runner_->PostDelayedTask(FROM_HERE, On 2016/07/20 22:13:53, ccameron wrote: > |task_runner_| isn't optional, but I would suggest making it optional -- for > your use-case, posting tasks doesn't seem worth doing the plumbing. Whoops, you're right. The method base::ThreadTaskRunnerHandle::Get().get() allows us to skip all plumbing. I actually think that ResourcePool should call that method directly, since it expects to post back onto the same thread that called task_runner_->PostDelayedTask. I'll do that in a follow up CL.
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_chromeos_ozone_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
My issue is with the interface we're adding the ResourcePool -- actually, there's a way to avoid changing ResourcePool, while not adding any extra tracking. I've outlined it in the comments -- the gist is to, GLRenderer::ScheduleCALayers, release the Resource* as soon as we've locked it (so, in that function). The ResourcePool won't re-use a resource until its read-locks have all gone away, so that's safe. https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.cc File cc/output/gl_renderer.cc (right): https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3641: for (const CALayerOverlay& ca_layer_overlay : frame->ca_layer_overlay_list) { Resource* overlay_resource = nullptr; https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3647: &resource_id); CopyRenderPassToOverlayResource now takes a Resource**, &overlay_resource. https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3658: } At this point it's safe to if (overlay_resource) overlay_resource_pool_->ReleaseResource(overlay_resource) because we have the lock, which will prevent the pool from re-using it. We could, alternatively, save up a vector of Resource*s, and release them all at the end, if that seems better. https://codereview.chromium.org/2162193002/diff/80001/cc/output/gl_renderer.c... cc/output/gl_renderer.cc:3719: swapped_and_acked_overlay_resources_.erase(it); On 2016/07/20 23:40:39, erikchen wrote: > On 2016/07/20 22:13:53, ccameron wrote: > > (from gl_renderer.h) ... > > > > We can just check for resource_id in overlay_pool_resources_in_use_, and > release > > it back to the pool if we find it. > > I don't think that's a great idea. We'd be maintaining a copy of the member > |in_use_resources_| of resource pool, using separate logic, just so that we > could check whether a given resource is in the data structure. This would now no longer need to do the release.
ccameron: PTAL
lgtm https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.cc File cc/output/gl_renderer.cc (right): https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.... cc/output/gl_renderer.cc:3750: gl_->CopySubTextureCHROMIUM(source_texture, destination.texture_id(), 0, 0, 0, nit: I guess we can just do CopyTextureCHROMIUM? Sorry I didn't notice this earlier.
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.cc File cc/output/gl_renderer.cc (right): https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.... cc/output/gl_renderer.cc:3750: gl_->CopySubTextureCHROMIUM(source_texture, destination.texture_id(), 0, 0, 0, On 2016/07/21 20:47:18, ccameron wrote: > nit: I guess we can just do CopyTextureCHROMIUM? Sorry I didn't notice this > earlier. I think CopyTextureCHROMIUM would work because of its implementation, but the semantics would be wrong, since it implies a change in destination format/allocation, ala CopyTexImage.
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
On 2016/07/21 20:55:14, erikchen wrote: > https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.cc > File cc/output/gl_renderer.cc (right): > > https://codereview.chromium.org/2162193002/diff/140001/cc/output/gl_renderer.... > cc/output/gl_renderer.cc:3750: gl_->CopySubTextureCHROMIUM(source_texture, > destination.texture_id(), 0, 0, 0, > On 2016/07/21 20:47:18, ccameron wrote: > > nit: I guess we can just do CopyTextureCHROMIUM? Sorry I didn't notice this > > earlier. > > I think CopyTextureCHROMIUM would work because of its implementation, but the > semantics would be wrong, since it implies a change in destination > format/allocation, ala CopyTexImage. Ah, good point.
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...) win_chromium_compile_dbg_ng on master.tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_comp...)
The CQ bit was checked by erikchen@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from ccameron@chromium.org Link to the patchset: https://codereview.chromium.org/2162193002/#ps160001 (title: "Rebase.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...)
The CQ bit was checked by erikchen@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...)
The CQ bit was checked by erikchen@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...)
The CQ bit was checked by erikchen@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...)
The CQ bit was checked by erikchen@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_androi...)
The CQ bit was checked by erikchen@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by erikchen@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from ccameron@chromium.org Link to the patchset: https://codereview.chromium.org/2162193002/#ps180001 (title: "Construct the resource pool on demand.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Message was sent while issue was closed.
Description was changed from ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ========== to ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ==========
Message was sent while issue was closed.
Committed patchset #10 (id:180001)
Message was sent while issue was closed.
Description was changed from ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel ========== to ========== Add logic to GLRenderer to support RenderPassDrawQuad copying. If the overlay processor emits a CALayerOverlay with a valid render_pass_id member, then the GLRenderer needs to copy the contents of the render pass to an overlay resource. The GLRenderer uses a ResourcePool to allocate and reuse overlay resources. BUG=581526 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_blink_rel Committed: https://crrev.com/31df088c9aa21cada253b2e17dca1ff383697975 Cr-Commit-Position: refs/heads/master@{#407647} ==========
Message was sent while issue was closed.
Patchset 10 (id:??) landed as https://crrev.com/31df088c9aa21cada253b2e17dca1ff383697975 Cr-Commit-Position: refs/heads/master@{#407647} |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
