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

Issue 905337 link

Starred by 4 users

Issue metadata

Status: Fixed
Owner:
Closed: Nov 29
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug

Blocking:
issue 898270



Sign in to add a comment

SkiaRenderer + DDL crashes in Skia

Project Member Reported by penghuang@google.com, Nov 14

Issue description

Reproduce steps:
1. launch chrome with
 --enable-features=VizDisplayCompositor,UseSkiaRenderer,UseSkiaDeferredDisplayList --enable-oop-rasterization --enable-gpu-rasterization --enable-raster-to-sk-image https://webkit.org/blog-files/3d-transforms/poster-circle.html

2. Click the user icon on left size of the menu (three dots) icon.
3. Move mouse on the menu to change  the highlight menu item continuously.
4. The crash happens.

The crash happen in GrResourceCache::validate(), but it not always happens at the same line of that function.


Crash log:
[151018:151084:1114/121204.490959:ERROR:GrResourceCache.cpp(800)] ../../third_party/skia/src/gpu/GrResourceCache.cpp:800: fatal error: "assert(stats.fBytes == fBytes)"

Received signal 6
#0 0x7f32fa43aedf base::debug::StackTrace::StackTrace()
#1 0x7f32fa43a9c1 base::debug::(anonymous namespace)::StackDumpSignalHandler()
#2 0x7f32edfd20c0 <unknown>
#3 0x7f32ebe62fcf gsignal
#4 0x7f32ebe643fa abort
#5 0x7f32f9bfd275 sk_abort_no_print()
#6 0x7f32f9cb4633 GrResourceCache::validate()
#7 0x7f32f9c86d23 GrGpuResource::notifyRefCountIsZero()
#8 0x7f32f9c60b12 sk_sp<>::~sk_sp()
#9 0x7f32f9dbcffc SkImage_Gpu::~SkImage_Gpu()
#10 0x7f32fa03e87a SkImageShader::~SkImageShader()
#11 0x7f32fa0a507e SkShaderMF::~SkShaderMF()
#12 0x7f32f9d05ebb sk_sp<>::operator=()
#13 0x7f32f9fb1c25 SkPaint::operator=()
#14 0x7f32f9fb25f8 SkPaint::reset()
#15 0x7f32ea6714d9 viz::SkiaRenderer::DoDrawQuad()
#16 0x7f32ea62f33f viz::DirectRenderer::DrawRenderPass()
#17 0x7f32ea62e37b viz::DirectRenderer::DrawRenderPassAndExecuteCopyRequests()
#18 0x7f32ea62db54 viz::DirectRenderer::DrawFrame()
#19 0x7f32ea63421e viz::Display::DrawAndSwap()
#20 0x7f32ea643a52 viz::DisplayScheduler::DrawAndSwap()
#21 0x7f32ea643163 viz::DisplayScheduler::AttemptDrawAndSwap()
#22 0x7f32ea64296c viz::DisplayScheduler::OnBeginFrameDeadline()
#23 0x7f32ea645884 _ZN4base8internal7InvokerINS0_9BindStateIMN3viz16DisplaySchedulerEFvvEJNS_7WeakPtrIS4_EEEEEFvvEE3RunEPNS0_13BindStateBaseE
#24 0x7f32ea645eac _ZN4base8internal22CancelableCallbackImplINS_17RepeatingCallbackIFvvEEEE16ForwardRepeatingIJEEEvDpT_
#25 0x7f32ea645884 _ZN4base8internal7InvokerINS0_9BindStateIMN3viz16DisplaySchedulerEFvvEJNS_7WeakPtrIS4_EEEEEFvvEE3RunEPNS0_13BindStateBaseE
#26 0x7f32fa340bff base::debug::TaskAnnotator::RunTask()
#27 0x7f32fa36f83f base::MessageLoopImpl::RunTask()
#28 0x7f32fa36fea2 base::MessageLoopImpl::DoWork()
#29 0x7f32fa371f46 base::MessagePumpDefault::Run()
#30 0x7f32fa36f321 base::MessageLoopImpl::Run()
#31 0x7f32fa3a2796 base::RunLoop::Run()
#32 0x7f32fa4039ba base::Thread::Run()
#33 0x7f32fa403fc6 base::Thread::ThreadMain()
#34 0x7f32fa451af8 base::(anonymous namespace)::ThreadFunc()
#35 0x7f32edfc8494 start_thread
#36 0x7f32ebf18a8f clone
  r8: 0000000000000000  r9: 00007f32d82be660 r10: 0000000000000008 r11: 0000000000000246
 r12: 00001643975d7580 r13: 00007f32f9ab4dd5 r14: 0000000000000055 r15: 00000000022bf952
  di: 0000000000000002  si: 00007f32d82be660  bp: 00007f32d82be8a0  bx: 0000000000000006
  dx: 0000000000000000  ax: 0000000000000000  cx: 00007f32ebe62fcf  sp: 00007f32d82be6d8
  ip: 00007f32ebe62fcf efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000
 trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000
[end of stack trace]

 
Hi Greg, cold you please take a look? Thanks.
Cc: penghuang@chromium.org
Blocking: 898270
I tried looking at this a little. I can reproduce it but I'm not seeing anything jump out immediately that is wrong. Do you know internally what chrome is trying to do when this crashes usually? Also when did this start failing? Do you have any sort of bisect.

I may be slow to really get a deep dive into this as there are numerous other things on my plate as well, so any additional debugging into the problem like what chrome is doing that eventually causes this crash would be very helpful.
Specifically I am wondering if the crash is always happening when we are trying to destroying an object on the DDL thread with the recording GrContext, or if it happens even on the main thread with the main GrContext
I remember I only found this crash happen on ddl thread when destroy a sk object. I will confirm it next Monday.
Owner: penghuang@chromium.org
Okay so the general problem is the following. A promise SkImage gets created on a DDL recording thread, and is stored in SkiaRenderer. We then finish the DDL, and flush on the main thread. During the flush the GrTexture that is backing the promise SkImage gets instantiated and thus put in our GrResourceCache of the main GrContext. After the draw using that GrTexture we release all refs accept the one held by the SkImage.

When we start recording the next frame, we release this SkImage which ends up calling the release of the GrTexture. If this release happens at the same time as the main gpu thread is accessing the GrResourceCache we get the asserts that we're seeing.

In this specific case, the main culprit is caused by current_paint_ in SkiaRenderer. When we add a ShaderMaskFilter to it, the paint stores a ref to the SkImage for the shader. If this is the last draw of the frame, we will keep this ref on the paint till the next frame when we call reset() in DoDrawQuad.

Hacking around there may be two possible immediate fixes for the current crash. First would be to call current_paint_.reset() in FinishDrawingQuadList() where we clear the promise images. I'm guessing you're clearing the promise images here for the same reason?

The second would be to not have current_paint_ be a member variable but instead just create a local stack paint in DoDrawQuad and pass the paint to the helper Draw calls. Since you're always resetting paint in DoDrawQuad I think this is the better approach and I don't believe you're gaining any performance by having current_paint_ be a member. This approach also makes it so you don't need to make sure FinishDrawingQuadList is always called at the timing you want.

Passing this back to penghuang@ to decide on which fix to go with.

In the mean time on the Skia side we need to think about how to make this part of the system smoother. It doesn't not seem good that the client of DDLs needs to know that it should not keep SkImage refs around. Especially since the failure case is not obvious to the client that behind their back the SkImage got instantiated into our ResourceCache so that depending on when they release the SkImage ref different side effects may happen.
Resetting current_paint_ does fix the issue. Thanks.
BTW, do we have a bug for tracking the skia side issue?
Project Member

Comment 9 by bugdroid1@chromium.org, Nov 19

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e300850ab6c167dba87d3b9d138edc23d0541e60

commit e300850ab6c167dba87d3b9d138edc23d0541e60
Author: Peng Huang <penghuang@chromium.org>
Date: Mon Nov 19 20:54:38 2018

Fix SkiaRenderer + DDL related crash.

Skia has a problem to with GrResourceCache. This CL workaround the issue
by not keep a SkPaint object during frames.

Bug:  905337 
Change-Id: I0f44eb7502d41cd54015fe651a373d8bae65fda8
Reviewed-on: https://chromium-review.googlesource.com/c/1342501
Commit-Queue: Peng Huang <penghuang@chromium.org>
Reviewed-by: weiliangc <weiliangc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609426}
[modify] https://crrev.com/e300850ab6c167dba87d3b9d138edc23d0541e60/components/viz/service/display/skia_renderer.cc
[modify] https://crrev.com/e300850ab6c167dba87d3b9d138edc23d0541e60/components/viz/service/display/skia_renderer.h

Status: Fixed (was: Assigned)
Cc: egdaniel@chromium.org
 Issue 907694  has been merged into this issue.
Status: Assigned (was: Fixed)
The assert here is most likely he same since between this original bug and the dup'd in bug we added the assert in Skia to know if two threads are hitting the resource cache at the same time.

The  issue 907694  looks to be a related crash which is caused by the unrefing during clear call in FinishDrawingQuadList. Is there a chance that the list of promiseImages that gets cleared here has an Image on them that is cached somewhere that causes it to live longer than when we flush the DDL into the main GrContext?

My first look it seems like the actual promiseImage list is only built up during recording and cleared before drawing the DDL, but if one of its images is cached elsewhere as well it could cause a similar error.
Owner: egdaniel@chromium.org
Is there some instrumentation I should add? The crash in  issue 907694  reproduces almost immediately.
Owner: spang@chromium.org
By instrumentation are you talk about debugging? I guess I would try to see which SkImage in the promise_image_ map is causing the problems when we call clear and then backtrace to where it was made and who holds refs to it. We need to make sure the DDL thread/context doesn't ever hold the last ref to an SkImage after that SkImage was used in a DDL that was drawn. The easiest way to do this is for the DDL context to release all SkImage before it was drawn.

Additionally this could happen if you are creating a gpu texture backed SkImage without using promise images, add that to the DDL context promise_images_, and then clear it. But I think for this case you'd have to clear that array without actually drawing that SkImage into the DDL (since the DDL itself should hold a ref), so I'm not sure why it would be in the promise_image_ array in this case.
Here's one owner, per GrSingleOwner:

#01: pc 0x4a7ddeadb84c sp 0xf0d457a1008 (libc.so,0x1684c)
#02: sk_abort_no_print() at SkMemory_new_handler.cpp:?
#03: GrSingleOwner::enter() at GrContext.cpp:?
#04: GrResourceCache::notifyCntReachedZero(GrGpuResource*, unsigned int) at GrResourceCache.cpp:?
#05: GrGpuResource::notifyRefCountIsZero() const at GrGpuResource.cpp:?
#06: sk_sp<GrTextureProxy>::~sk_sp() at SkGpuBlurUtils.cpp:?
#07: SkImage_Gpu::~SkImage_Gpu() at SkImage_Gpu.cpp:?
#08: SkRefCntBase::unref() const at paint_canvas_video_renderer.cc:?
#09: sk_sp<SkImage>::~sk_sp() at paint_canvas_video_renderer.cc:?
#10: base::internal::flat_tree<unsigned int, std::__1::pair<unsigned int, sk_sp<SkImage> >, base::internal::GetKeyFromValuePairFirst<unsigned int, sk_sp<SkImage> >, std::__1::less<void> >::clear() at skia_renderer.cc:?
#11: viz::SkiaRenderer::FinishDrawingQuadList() at skia_renderer.cc:?
#12: viz::DirectRenderer::DrawRenderPass(viz::RenderPass const*) at direct_renderer.cc:?
#13: viz::DirectRenderer::DrawRenderPassAndExecuteCopyRequests(viz::RenderPass*) at direct_renderer.cc:?
#14: viz::DirectRenderer::DrawFrame(std::__1::vector<std::__1::unique_ptr<viz::RenderPass, std::__1::default_delete<viz::RenderPass> >, std::__1::allocator<std::__1::unique_ptr<viz::RenderPass, std::__1::default_delete<viz::RenderPass> > > >*, float, gfx::Size const&) at direct_renderer.cc:?
#15: viz::Display::DrawAndSwap() at display.cc:?
#16: viz::DisplayScheduler::DrawAndSwap() at display_scheduler.cc:?
#17: viz::DisplayScheduler::OnBeginFrameDeadline() at display_scheduler.cc:?
#18: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at task_annotator.cc:?
#19: base::MessageLoopImpl::RunTask(base::PendingTask*) at message_loop_impl.cc:?
#20: base::MessageLoopImpl::DoWork() at message_loop_impl.cc:?
#21: base::MessagePumpDefault::Run(base::MessagePump::Delegate*) at message_pump_default.cc:?
#22: base::MessageLoopImpl::Run(bool) at message_loop_impl.cc:?
#23: base::RunLoop::Run() at run_loop.cc:?
#24: base::Thread::Run(base::RunLoop*) at thread.cc:?
#25: base::Thread::ThreadMain() at thread.cc:?
#26: base::(anonymous namespace)::ThreadFunc(void*) at platform_thread_posix.cc:?
#27: pc 0x4a7ddeadc606 sp 0xf0d457a2fd0 (libc.so,0x17606)
#28: pc 0x4a7ddeb4ba41 sp 0xf0d457a2fe0 (libc.so,0x86a41)
#29: pc 0 sp 0xf0d457a3000

Here's the other owner:

#00: base::debug::StackTrace::StackTrace(unsigned long) at stack_trace_fuchsia.cc:?                                                                                
#01: GrSingleOwner::enter() at GrContext.cpp:?                                                                                                                    
#02: GrContext::flush() at GrContext.cpp:?                                                                                                                         
#03: viz::SkiaOutputSurfaceImplOnGpu::FinishPaintCurrentFrame(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList> >, unsigned long) at
 skia_output_surface_impl_on_gpu.cc:?                                    
#04: void base::internal::FunctorTraits<void (viz::SkiaOutputSurfaceImplOnGpu::*)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList>
>, unsigned long), void>::Invoke<void (viz::SkiaOutputSurfaceImplOnGpu::*)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList> >, unsi
gned long), viz::SkiaOutputSurfaceImplOnGpu*, std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList> >, unsigned long>(void (viz::SkiaOut
putSurfaceImplOnGpu::*)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList> >, unsigned long), viz::SkiaOutputSurfaceImplOnGpu*&&, std
::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkDeferredDisplayList> >&&, unsigned long&&) at skia_output_surface_impl.cc:?
#05: void base::internal::Invoker<base::internal::BindState<void (viz::SkiaOutputSurfaceImplOnGpu::*)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<SkD
eferredDisplayList> >, unsigned long), base::internal::UnretainedWrapper<viz::SkiaOutputSurfaceImplOnGpu>, std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delet
e<SkDeferredDisplayList> >, unsigned long>, void ()>::RunImpl<void (viz::SkiaOutputSurfaceImplOnGpu::*)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1::default_delete<S
kDeferredDisplayList> >, unsigned long), std::__1::tuple<base::internal::UnretainedWrapper<viz::SkiaOutputSurfaceImplOnGpu>, std::__1::unique_ptr<SkDeferredDisplayList, std::
__1::default_delete<SkDeferredDisplayList> >, unsigned long>, 0ul, 1ul, 2ul>(void (viz::SkiaOutputSurfaceImplOnGpu::*&&)(std::__1::unique_ptr<SkDeferredDisplayList, std::__1:
:default_delete<SkDeferredDisplayList> >, unsigned long), std::__1::tuple<base::internal::UnretainedWrapper<viz::SkiaOutputSurfaceImplOnGpu>, std::__1::unique_ptr<SkDeferredD
isplayList, std::__1::default_delete<SkDeferredDisplayList> >, unsigned long>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) at skia_output_surface_impl.cc:?
#06: base::OnceCallback<void ()>::Run() && at layout_test.mojom.cc:?
#07: gpu::Scheduler::RunNextTask() at scheduler.cc:?
#08: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at task_annotator.cc:?
#09: base::MessageLoopImpl::RunTask(base::PendingTask*) at message_loop_impl.cc:?
#10: base::MessageLoopImpl::DoWork() at message_loop_impl.cc:?
#11: base::MessagePumpFuchsia::Run(base::MessagePump::Delegate*) at message_pump_fuchsia.cc:?
#12: base::MessageLoopImpl::Run(bool) at message_loop_impl.cc:?
#13: base::RunLoop::Run() at run_loop.cc:?
#14: content::GpuMain(content::MainFunctionParams const&) at gpu_main.cc:?
#15: content::ContentMainRunnerImpl::Run(bool) at content_main_runner_impl.cc:?
#16: service_manager::Main(service_manager::MainParams const&) at main.cc:?
#17: content::ContentMain(content::ContentMainParams const&) at content_main.cc:?
#18: main at shell_main.cc:?

Can you describe how this is expected to work? We're not clearing the map until after the callback is posted, so it doesn't seem surprising that it may have already started running.
Owner: ----
Cc: bsalomon@chromium.org
So when I say DDL thread I mean the thread that is recording the DDL. I'm not sure what chrome calls them. So there may be a bunch of DDL threads that are recording DDLs and then a single thread with the main GrContext that the DDLs are drawn into. Each thread has its own GrContext, but only the main thread has a GrContext that has a GrResourceCache (basically the cache of GPU textures). So on the DDL recording threads the SkImages are typically just backed by a GrTextureProxy that has been instantiated to hold a real GPU texture yet. When we draw the DDL into the main context/thread, we instantiate those proxies via the PromiseImage apis. Once instantiate those textures live in the GrResourceCache of the main thread.

Now if you have an SkImage that is backed by a GPU texture (which is our typical case), if that texture has been instantiated and the SkImage happens to have the last ref to the texture (would happen if all draws that use the SkImage have already been flushed), when you release the SkImage it will release the texture and we will delete it from our ResourceCache. So now the issue is that our GrResourceCache is not thread safe. So we can only have one thread access it at once. So if the SkImage gets released on a DDL thread after it has been instantiated there is a chance that it will cause the Texture to be removed from the ResourceCache. But if the main thread happens to be using the resource cache at the same time (not necessarily even for that texture), we hit the assert you are seeing.

So in the current system the general approach is that make sure you are not holding onto any SkImages in non main threads that may have been instantiated. If you are only using PromiseImages then this means creating new PromiseImages for each new DDL and then releasing the refs of those SkImages before drawing the DDL (and any objects that may be holding refs to images).

We understand that this is really annoying for the clients so we have plans to try to improve this system to alleviate some of these restrictions (specifically not being able to release images on arbitrary threads). However, I'm not sure what the time table is for improving this fully. A shorter term change may just improve this for Promise and Wrapped images.

Adding bsalomon who probably will be the person who will look into this.
Cc: spang@chromium.org
Hi spang@ I uploaded a CL (https://crrev/c/1351266) to workaround the racing issue. Could you please try it? Thanks.

I'm still getting the lay of the land here (unfortunately the expert on this stuff is on leave for a while). I think the bug is that Skia should be cleaning up the GrTexture object when a DDL is flushed but for some reason that isn't happening. So the SkImage retains a (indirect) ref on it and then goes boom when the image and therefore the GrTexture is unreffed on the DLL producing thread.
@18

With https://crrev/c/1351266 it has not crashed yet, thanks.
Project Member

Comment 21 by bugdroid1@chromium.org, Nov 29

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ce48cf76141dac6cd5de72034096cd00cd57f6fa

commit ce48cf76141dac6cd5de72034096cd00cd57f6fa
Author: Peng Huang <penghuang@chromium.org>
Date: Thu Nov 29 20:20:28 2018

Workaround skia promise image release racinqg issue

Bug:  905337 
Change-Id: I14e4188def4719f0b04151bf9d76731a46889612
Reviewed-on: https://chromium-review.googlesource.com/c/1351266
Reviewed-by: Michael Spang <spang@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612334}
[modify] https://crrev.com/ce48cf76141dac6cd5de72034096cd00cd57f6fa/components/viz/service/display/skia_renderer.cc

Owner: penghuang@chromium.org
Status: Fixed (was: Assigned)
The problem has been workarounded in chrome. Mark it as fixed.
It turns out that promise SkImages *should* be able to be destroyed on the producer thread. However, we had a bug in Skia (fixed by above change) that was triggered when this change landed:

https://chromium.googlesource.com/chromium/src/+/42c8a1ddda754e566139ab90c18ad2b2682f731d

That change made it so that the GrContext was no longer created with the "explicit allocation" flag which triggered the bug.

So, going forward (once this rolls into Chrome) it should be possible to keep SkImages around and reuse them across DDLs or just unref them lazily in the producer thread without worrying about doing so before the DDL is executed or destroyed.
Project Member

Comment 25 by bugdroid1@chromium.org, Dec 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8869ba9507397f8234dfd7c6fb517f2a3bae9976

commit 8869ba9507397f8234dfd7c6fb517f2a3bae9976
Author: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Date: Mon Dec 03 17:08:35 2018

Roll src/third_party/skia e6305f38b584..b13658891bbd (60 commits)

https://skia.googlesource.com/skia.git/+log/e6305f38b584..b13658891bbd


git log e6305f38b584..b13658891bbd --date=short --no-merges --format='%ad %ae %s'
2018-12-03 michaelludwig@google.com Revert "Send max coverage limit for subpixel rects"
2018-12-03 egdaniel@google.com Revert "Add support for Ycbcr Conversion Samplers in vulkan."
2018-12-03 egdaniel@google.com Add support for Ycbcr Conversion Samplers in vulkan.
2018-12-03 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 4abdf74f0afc..35cd7332ab62 (1 commits)
2018-12-03 brianosman@google.com Revert "Share GP implementation between GrFillRectOp and GrTextureOp"
2018-12-03 caryclark@skia.org add breaktext doc skeleton
2018-12-03 skia-bookmaker@skia-swarming-bots.iam.gserviceaccount.com Update markdown files
2018-12-03 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update go_deps asset
2018-12-03 reed@google.com breakText on font
2018-12-02 reed@google.com start to use font for measure, not paint
2018-12-02 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update SKP version
2018-12-02 skia-bookmaker@skia-swarming-bots.iam.gserviceaccount.com Update markdown files
2018-12-02 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update go_deps asset
2018-12-01 reed@google.com don't trust convexity after a transform
2018-12-01 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update go_deps asset
2018-12-01 fmalita@chromium.org [skottie] Expose composition markers to embedders
2018-12-01 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 317a9ebdb019..4abdf74f0afc (2 commits)
2018-11-30 bsalomon@google.com Fix occurrences of "-Wextra-semi-stmt"
2018-11-30 reed@google.com experimental alternative isconvex
2018-11-30 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/swiftshader bffee5e5454c..bd49ad09c5ca (1 commits)
2018-11-30 bungeman@google.com Remove FontScalerTest sample.
2018-11-30 halcanary@google.com SkQP: doc simplify, make_apk_list to python, upload_apk tool
2018-11-30 michaelludwig@google.com Share GP implementation between GrFillRectOp and GrTextureOp
2018-11-30 michaelludwig@google.com Send max coverage limit for subpixel rects
2018-11-30 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/swiftshader d46faeb43287..bffee5e5454c (1 commits)
2018-11-30 bungeman@google.com Set mac windows to their current size.
2018-11-30 kjlubick@google.com [canvaskit] Save a copy on CPU backend by using RasterDirect
2018-11-30 bsalomon@google.com Uninstantiate proxies when not explicitly allocating
2018-11-30 herb@google.com Expand handling of empty glyphs to SDF and Path cases
2018-11-30 bungeman@google.com Fix new clang warning around shadowing.
2018-11-30 kjlubick@google.com [canvaskit] Fix conversion of large images to base64
2018-11-30 halcanary@google.com SkQP: refatctor C++ bits.
2018-11-30 herb@google.com Make SkGlyph::PathData own the path
2018-11-30 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 b51eb09fb5bb..317a9ebdb019 (1 commits)
2018-11-30 egdaniel@google.com Add blacklist for intel 405 vulkan perf bot.
2018-11-30 herb@google.com Make path position handling consistant with SDF
2018-11-30 brianosman@google.com Add SkEncodedOrigin to SkYUVASizeInfo, fix JPEG orientation in GPU decode path
2018-11-30 reed@google.com update docs around fonthinting
2018-11-30 kjlubick@google.com [canvaskit] Add gradients and clips
2018-11-30 skia-recreate-skps@skia-swarming-bots.iam.gserviceaccount.com Update go_deps asset
2018-11-30 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 8dc27f99b556..b51eb09fb5bb (5 commits)
2018-11-30 reed@google.com remove SK_SUPPORT_LEGACY_NESTED_HINTINGENUM code
2018-11-30 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/swiftshader a972758d6e10..d46faeb43287 (1 commits)
2018-11-29 brianosman@google.com Remove the lines-only "optimization" from AA convex path renderer
2018-11-29 hcm@google.com Update Skia milestone to 73
2018-11-29 csmartdalton@google.com Draw ovals with GrAAFillRRectOp
2018-11-29 brianosman@google.com In GrOpFlushState, store GrOp* rather than Unique ID
2018-11-29 recipe-roller@chromium.org Roll recipe dependencies (trivial).
2018-11-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll third_party/externals/angle2 7310da33bc7a..8dc27f99b556 (5 commits)
2018-11-29 benjaminwagner@google.com Add jobs for GalaxyS9
2018-11-29 bsalomon@google.com Modify workaround to never set base or max texture level for GL_TEXTURE_EXTERNAL_OES
2018-11-29 jvanverth@google.com Check for valid normals when offsetting
2018-11-29 michaelludwig@google.com Bugfixes for corner cases in per-edge AA
2018-11-29 mtklein@google.com check decal in 32.32 where we walk decal in 32.32
2018-11-29 caryclark@skia.org Update bookmaker
2018-11-29 fmalita@chromium.org [skottie] Expose property bindings in CK
2018-11-29 bsalomon@google.com Revert "Experimentally disable GrTextureOp chaining on Intel GPUs on Mac."
2018-11-29 caryclark@skia.org fix fuzz timeout in pathops
2018-11-29 mtklein@google.com clean up SK_WALK_DECAL_IN_1616
2018-11-29 reed@google.com remove textblobbuilder guard


Created with:
  gclient setdep -r src/third_party/skia@b13658891bbd

The AutoRoll server is located here: https://autoroll.skia.org/r/skia-autoroll

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md

If the roll is causing failures, please contact the current sheriff, who should
be CC'd on the roll, and stop the roller if necessary.

CQ_INCLUDE_TRYBOTS=luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux-blink-rel;luci.chromium.try:linux-chromeos-compile-dbg;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel

BUG=chromium:899689, chromium:905337 ,chromium:908566,chromium:906453, chromium:910097 
TBR=jcgregorio@chromium.org

Change-Id: I5cfcadca44e3a695285931eabc243b9fd0599dc9
Reviewed-on: https://chromium-review.googlesource.com/c/1358793
Reviewed-by: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Commit-Queue: chromium-autoroll <chromium-autoroll@skia-public.iam.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#613130}
[modify] https://crrev.com/8869ba9507397f8234dfd7c6fb517f2a3bae9976/DEPS

Sign in to add a comment