|
|
Chromium Code Reviews|
Created:
5 years, 3 months ago by Daniele Castagna Modified:
5 years, 3 months ago CC:
chromium-reviews, feature-media-reviews_chromium.org Base URL:
https://chromium.googlesource.com/chromium/src.git@master Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
DescriptionVideo to canvas: don't draw if a SkImage can't be created.
Skia can return nullptr from NewFromAdoptedTexture and NewFromYUVTexturesCopy after
a context loss.
If this happens SkCanvasVideoRenderer should not draw anything instead of crashing.
BUG=526615
Committed: https://crrev.com/35fb56409a8ec2d873d95fdf130f98e39d21e938
Cr-Commit-Position: refs/heads/master@{#347810}
Patch Set 1 #Patch Set 2 : Add test. #
Total comments: 2
Patch Set 3 : Dale's suggestion. #Patch Set 4 : Rebase on master. #
Total comments: 4
Patch Set 5 : Address junov's comments. #Patch Set 6 : Rebase on master. #Messages
Total messages: 22 (8 generated)
dcastagna@chromium.org changed reviewers: + junov@chromium.org
Code looks good, but I think this calls for a unit test.
On 2015/09/04 at 17:58:18, junov wrote: > Code looks good, but I think this calls for a unit test. Done.
dcastagna@chromium.org changed reviewers: + dalecurtis@chromium.org
+dalecurtis for ownership approval, assuming junov is fine with the added test.
lgtm % nit https://codereview.chromium.org/1325173005/diff/20001/media/blink/skcanvas_vi... File media/blink/skcanvas_video_renderer.cc (right): https://codereview.chromium.org/1325173005/diff/20001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer.cc:336: if (last_image_) { if (!last_image_) return;
https://codereview.chromium.org/1325173005/diff/20001/media/blink/skcanvas_vi... File media/blink/skcanvas_video_renderer.cc (right): https://codereview.chromium.org/1325173005/diff/20001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer.cc:336: if (last_image_) { On 2015/09/04 at 21:27:09, DaleCurtis wrote: > if (!last_image_) > return; Done.
lgtm with nits.
https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... File media/blink/skcanvas_video_renderer_unittest.cc (right): https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer_unittest.cc:515: TEST_F(SkCanvasVideoRendererTest, ContextLost) { Add a comment to say that this test passes by not crashing. https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer_unittest.cc:522: gr_context->abandonContext(); Nit: I would have put this after constructing Context3D to make it clear that the use case this test is intetersted in has to do with a working context that was dropped on the floor.
Thank you for the review! https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... File media/blink/skcanvas_video_renderer_unittest.cc (right): https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer_unittest.cc:515: TEST_F(SkCanvasVideoRendererTest, ContextLost) { On 2015/09/08 at 19:14:17, Justin Novosad wrote: > Add a comment to say that this test passes by not crashing. Done. https://codereview.chromium.org/1325173005/diff/60001/media/blink/skcanvas_vi... media/blink/skcanvas_video_renderer_unittest.cc:522: gr_context->abandonContext(); On 2015/09/08 at 19:14:17, Justin Novosad wrote: > Nit: I would have put this after constructing Context3D to make it clear that the use case this test is intetersted in has to do with a working context that was dropped on the floor. Done.
The CQ bit was checked by dcastagna@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from dalecurtis@chromium.org, junov@chromium.org Link to the patchset: https://codereview.chromium.org/1325173005/#ps80001 (title: "Address junov's comments.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1325173005/80001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1325173005/80001
The CQ bit was unchecked by commit-bot@chromium.org
Failed to apply patch for media/blink/skcanvas_video_renderer_unittest.cc:
While running git apply --index -3 -p1;
error: patch failed: media/blink/skcanvas_video_renderer_unittest.cc:3
Falling back to three-way merge...
Applied patch to 'media/blink/skcanvas_video_renderer_unittest.cc' with
conflicts.
U media/blink/skcanvas_video_renderer_unittest.cc
Patch: media/blink/skcanvas_video_renderer_unittest.cc
Index: media/blink/skcanvas_video_renderer_unittest.cc
diff --git a/media/blink/skcanvas_video_renderer_unittest.cc
b/media/blink/skcanvas_video_renderer_unittest.cc
index
9b8765aa4c5784eed6fc273c9a2634adb8b9e338..348b497b5ef73b0782088987b91665e2d9951828
100644
--- a/media/blink/skcanvas_video_renderer_unittest.cc
+++ b/media/blink/skcanvas_video_renderer_unittest.cc
@@ -3,12 +3,16 @@
// found in the LICENSE file.
#include "base/message_loop/message_loop.h"
+#include "gpu/GLES2/gl2extchromium.h"
+#include "gpu/command_buffer/client/gles2_interface_stub.h"
#include "media/base/timestamp_constants.h"
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
#include "media/blink/skcanvas_video_renderer.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/gpu/GrContext.h"
+#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
using media::VideoFrame;
@@ -75,7 +79,7 @@ class SkCanvasVideoRendererTest : public testing::Test {
// Standard canvas.
SkCanvas* target_canvas() { return &target_canvas_; }
- private:
+ protected:
SkCanvasVideoRenderer renderer_;
scoped_refptr<VideoFrame> natural_frame_;
@@ -497,4 +501,39 @@ TEST_F(SkCanvasVideoRendererTest,
Video_Translate_Rotation_270) {
EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth / 2, kHeight - 1));
}
+namespace {
+class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub {
+ public:
+ void GenTextures(GLsizei n, GLuint* textures) override {
+ DCHECK_EQ(1, n);
+ *textures = 1;
+ }
+};
+void MailboxHoldersReleased(uint32 sync_point) {}
+} // namespace
+
+// Test that SkCanvasVideoRendererTest::Paint doesn't crash when GrContext is
+// abandoned.
+TEST_F(SkCanvasVideoRendererTest, ContextLost) {
+ skia::RefPtr<const GrGLInterface> null_interface =
+ skia::AdoptRef(GrGLCreateNullInterface());
+ auto gr_context = skia::AdoptRef(GrContext::Create(
+ kOpenGL_GrBackend,
+ reinterpret_cast<GrBackendContext>(null_interface.get())));
+ gr_context->abandonContext();
+
+ SkCanvas canvas(AllocBitmap(kWidth, kHeight));
+
+ TestGLES2Interface gles2;
+ Context3D context_3d(&gles2, gr_context.get());
+ gfx::Size size(kWidth, kHeight);
+ gpu::MailboxHolder mailbox(gpu::Mailbox::Generate(),
GL_TEXTURE_RECTANGLE_ARB,
+ 0);
+ auto video_frame = VideoFrame::WrapNativeTexture(
+ PIXEL_FORMAT_UYVY, mailbox, base::Bind(MailboxHoldersReleased), size,
+ gfx::Rect(size), size, kNoTimestamp());
+
+ renderer_.Paint(video_frame, &canvas, kNaturalRect, 0xFF,
+ SkXfermode::kSrcOver_Mode, VIDEO_ROTATION_90, context_3d);
+}
} // namespace media
The CQ bit was unchecked by commit-bot@chromium.org
The CQ bit was checked by dcastagna@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from dalecurtis@chromium.org, junov@chromium.org Link to the patchset: https://codereview.chromium.org/1325173005/#ps100001 (title: "Rebase on master.")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1325173005/100001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1325173005/100001
Message was sent while issue was closed.
Committed patchset #6 (id:100001)
Message was sent while issue was closed.
Patchset 6 (id:??) landed as https://crrev.com/35fb56409a8ec2d873d95fdf130f98e39d21e938 Cr-Commit-Position: refs/heads/master@{#347810} |
