| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include <stdint.h> |    5 #include <stdint.h> | 
 |    6 #include <GLES3/gl3.h> | 
|    6  |    7  | 
|    7 #include "base/macros.h" |    8 #include "base/macros.h" | 
|    8 #include "base/message_loop/message_loop.h" |    9 #include "base/message_loop/message_loop.h" | 
|    9 #include "gpu/GLES2/gl2extchromium.h" |   10 #include "gpu/GLES2/gl2extchromium.h" | 
|   10 #include "gpu/command_buffer/client/gles2_interface_stub.h" |   11 #include "gpu/command_buffer/client/gles2_interface_stub.h" | 
|   11 #include "media/base/timestamp_constants.h" |   12 #include "media/base/timestamp_constants.h" | 
|   12 #include "media/base/video_frame.h" |   13 #include "media/base/video_frame.h" | 
|   13 #include "media/base/video_util.h" |   14 #include "media/base/video_util.h" | 
|   14 #include "media/renderers/skcanvas_video_renderer.h" |   15 #include "media/renderers/skcanvas_video_renderer.h" | 
|   15 #include "testing/gtest/include/gtest/gtest.h" |   16 #include "testing/gtest/include/gtest/gtest.h" | 
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  512             GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 3 / 6)); |  513             GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 3 / 6)); | 
|  513 } |  514 } | 
|  514  |  515  | 
|  515 namespace { |  516 namespace { | 
|  516 class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { |  517 class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { | 
|  517  public: |  518  public: | 
|  518   void GenTextures(GLsizei n, GLuint* textures) override { |  519   void GenTextures(GLsizei n, GLuint* textures) override { | 
|  519     DCHECK_EQ(1, n); |  520     DCHECK_EQ(1, n); | 
|  520     *textures = 1; |  521     *textures = 1; | 
|  521   } |  522   } | 
 |  523  | 
 |  524   GLuint CreateProgram() override { return ++program_base_; } | 
 |  525  | 
 |  526   unsigned program_base_ = 0; | 
|  522 }; |  527 }; | 
|  523 void MailboxHoldersReleased(const gpu::SyncToken& sync_token) {} |  528 void MailboxHoldersReleased(const gpu::SyncToken& sync_token) {} | 
|  524 }  // namespace |  529 }  // namespace | 
|  525  |  530  | 
|  526 // Test that SkCanvasVideoRendererTest::Paint doesn't crash when GrContext is |  531 // Test that SkCanvasVideoRendererTest::Paint doesn't crash when GrContext is | 
|  527 // abandoned. |  532 // abandoned. | 
|  528 TEST_F(SkCanvasVideoRendererTest, ContextLost) { |  533 TEST_F(SkCanvasVideoRendererTest, ContextLost) { | 
|  529   sk_sp<const GrGLInterface> null_interface(GrGLCreateNullInterface()); |  534   sk_sp<const GrGLInterface> null_interface(GrGLCreateNullInterface()); | 
|  530   sk_sp<GrContext> gr_context(GrContext::Create( |  535   sk_sp<GrContext> gr_context(GrContext::Create( | 
|  531       kOpenGL_GrBackend, |  536       kOpenGL_GrBackend, | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  583  |  588  | 
|  584   gfx::RectF visible_rect(visible_size.width(), visible_size.height()); |  589   gfx::RectF visible_rect(visible_size.width(), visible_size.height()); | 
|  585   SkPaint paint; |  590   SkPaint paint; | 
|  586   renderer_.Paint(video_frame, canvas, visible_rect, paint, VIDEO_ROTATION_0, |  591   renderer_.Paint(video_frame, canvas, visible_rect, paint, VIDEO_ROTATION_0, | 
|  587                   context_3d); |  592                   context_3d); | 
|  588  |  593  | 
|  589   EXPECT_EQ(fWidth / 2, renderer_.LastImageDimensionsForTesting().width()); |  594   EXPECT_EQ(fWidth / 2, renderer_.LastImageDimensionsForTesting().width()); | 
|  590   EXPECT_EQ(fWidth / 2, renderer_.LastImageDimensionsForTesting().height()); |  595   EXPECT_EQ(fWidth / 2, renderer_.LastImageDimensionsForTesting().height()); | 
|  591 } |  596 } | 
|  592  |  597  | 
 |  598 // Test that cached resources are restored when gl context is lost and restored. | 
 |  599 TEST_F(SkCanvasVideoRendererTest, Y16CachedGLResourcesContextRestore) { | 
 |  600   sk_sp<const GrGLInterface> null_interface(GrGLCreateNullInterface()); | 
 |  601   sk_sp<GrContext> gr_context(GrContext::Create( | 
 |  602       kOpenGL_GrBackend, | 
 |  603       reinterpret_cast<GrBackendContext>(null_interface.get()))); | 
 |  604  | 
 |  605   SkCanvas canvas(AllocBitmap(kWidth, kHeight)); | 
 |  606  | 
 |  607   TestGLES2Interface gles2; | 
 |  608   TestGLES2Interface gl_destination; | 
 |  609   unsigned texture, texture1, texture2; | 
 |  610   gl_destination.GenTextures(1, &texture); | 
 |  611   Context3D context_3d(&gles2, gr_context.get()); | 
 |  612   gfx::Size size(kWidth, kHeight); | 
 |  613   gpu::MailboxHolder holders[VideoFrame::kMaxPlanes] = {gpu::MailboxHolder( | 
 |  614       gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D)}; | 
 |  615   auto video_frame = VideoFrame::WrapNativeTextures( | 
 |  616       PIXEL_FORMAT_Y16, holders, base::Bind(MailboxHoldersReleased), size, | 
 |  617       gfx::Rect(size), size, kNoTimestamp); | 
 |  618  | 
 |  619   unsigned program_base_before = gles2.program_base_; | 
 |  620   renderer_.CopyVideoFrameTexturesToGLTexture( | 
 |  621       context_3d, &gl_destination, video_frame.get(), texture, GL_R32F, | 
 |  622       GL_FLOAT, true /*premultiply_alpha*/, true /*flip_y*/); | 
 |  623   // It is expected that the program for RG8 -> R32F conversion is created. | 
 |  624   EXPECT_EQ(gles2.program_base_ - program_base_before, 1u); | 
 |  625  | 
 |  626   gl_destination.GenTextures(1, &texture1); | 
 |  627   program_base_before = gles2.program_base_; | 
 |  628   renderer_.CopyVideoFrameTexturesToGLTexture( | 
 |  629       context_3d, &gl_destination, video_frame.get(), texture, GL_R32F, | 
 |  630       GL_FLOAT, true /*premultiply_alpha*/, true /*flip_y*/); | 
 |  631   // The program is expected to be cached - no new program created. | 
 |  632   EXPECT_EQ(gles2.program_base_ - program_base_before, 0u); | 
 |  633  | 
 |  634   gr_context->abandonContext(); | 
 |  635  | 
 |  636   sk_sp<const GrGLInterface> null_interface_1(GrGLCreateNullInterface()); | 
 |  637   sk_sp<GrContext> gr_context_1(GrContext::Create( | 
 |  638       kOpenGL_GrBackend, | 
 |  639       reinterpret_cast<GrBackendContext>(null_interface_1.get()))); | 
 |  640  | 
 |  641   gl_destination.GenTextures(1, &texture2); | 
 |  642   Context3D context_3d_1(&gles2, gr_context_1.get()); | 
 |  643   program_base_before = gles2.program_base_; | 
 |  644   renderer_.CopyVideoFrameTexturesToGLTexture( | 
 |  645       context_3d_1, &gl_destination, video_frame.get(), texture1, GL_R32F, | 
 |  646       GL_FLOAT, true /*premultiply_alpha*/, true /*flip_y*/); | 
 |  647   // As the new context is created, the new program is expected. | 
 |  648   EXPECT_EQ(gles2.program_base_ - program_base_before, 1u); | 
 |  649 } | 
 |  650  | 
|  593 }  // namespace media |  651 }  // namespace media | 
| OLD | NEW |