Index: cc/layer_tree_host_impl_unittest.cc |
diff --git a/cc/layer_tree_host_impl_unittest.cc b/cc/layer_tree_host_impl_unittest.cc |
index 106a702ef52ee53cd0125a18cb5000c380ed2d78..ce729af630e17e8fdc1864623e5df147e08ec09c 100644 |
--- a/cc/layer_tree_host_impl_unittest.cc |
+++ b/cc/layer_tree_host_impl_unittest.cc |
@@ -6,6 +6,7 @@ |
#include "cc/layer_tree_host_impl.h" |
+#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/hash_tables.h" |
#include "cc/delegated_renderer_layer_impl.h" |
@@ -34,6 +35,8 @@ |
#include "cc/tile_draw_quad.h" |
#include "cc/tiled_layer_impl.h" |
#include "cc/video_layer_impl.h" |
+#include "media/base/media.h" |
+#include "media/base/video_frame.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include <public/WebVideoFrame.h> |
@@ -44,6 +47,7 @@ using namespace LayerTestCommon; |
using namespace WebKit; |
using namespace WebKitTests; |
+using media::VideoFrame; |
using ::testing::Mock; |
using ::testing::Return; |
using ::testing::AnyNumber; |
@@ -63,6 +67,7 @@ public: |
, m_didRequestRedraw(false) |
, m_reduceMemoryResult(true) |
{ |
+ media::InitializeMediaLibraryForTesting(); |
} |
virtual void SetUp() |
@@ -2533,25 +2538,31 @@ private: |
base::hash_set<unsigned> m_allocatedTextureIds; |
}; |
-// Fake video frame that represents a 4x4 YUV video frame. |
+// Fake WebVideoFrame wrapper of media::VideoFrame. |
class FakeVideoFrame: public WebVideoFrame { |
public: |
- FakeVideoFrame() : m_textureId(0) { memset(m_data, 0x80, sizeof(m_data)); } |
+ explicit FakeVideoFrame(const scoped_refptr<VideoFrame>& frame) : m_frame(frame) { } |
virtual ~FakeVideoFrame() { } |
- virtual Format format() const { return m_textureId ? FormatNativeTexture : FormatYV12; } |
- virtual unsigned width() const { return 4; } |
- virtual unsigned height() const { return 4; } |
- virtual unsigned planes() const { return m_textureId ? 0 : 3; } |
- virtual int stride(unsigned plane) const { return 4; } |
- virtual const void* data(unsigned plane) const { return m_data; } |
- virtual unsigned textureId() const { return m_textureId; } |
- virtual unsigned textureTarget() const { return m_textureId ? GL_TEXTURE_2D : 0; } |
- void setTextureId(unsigned id) { m_textureId = id; } |
+ virtual Format format() const { NOTREACHED(); return FormatInvalid; } |
+ virtual unsigned width() const { NOTREACHED(); return 0; } |
+ virtual unsigned height() const { NOTREACHED(); return 0; } |
+ virtual unsigned planes() const { NOTREACHED(); return 0; } |
+ virtual int stride(unsigned plane) const { NOTREACHED(); return 0; } |
+ virtual const void* data(unsigned plane) const { NOTREACHED(); return NULL; } |
+ virtual unsigned textureId() const { NOTREACHED(); return 0; } |
+ virtual unsigned textureTarget() const { NOTREACHED(); return 0; } |
+ |
+ static VideoFrame* toVideoFrame(WebVideoFrame* web_video_frame) { |
+ FakeVideoFrame* wrapped_frame = |
+ static_cast<FakeVideoFrame*>(web_video_frame); |
+ if (wrapped_frame) |
+ return wrapped_frame->m_frame.get(); |
+ return NULL; |
+ } |
private: |
- char m_data[16]; |
- unsigned m_textureId; |
+ scoped_refptr<VideoFrame> m_frame; |
}; |
// Fake video frame provider that always provides the same FakeVideoFrame. |
@@ -2696,10 +2707,15 @@ TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
textureLayerWithMask->setMaskLayer(maskLayer.PassAs<LayerImpl>()); |
rootLayer->addChild(textureLayerWithMask.PassAs<LayerImpl>()); |
- FakeVideoFrame videoFrame; |
+ FakeVideoFrame videoFrame(VideoFrame::CreateColorFrame(gfx::Size(4, 4), |
+ 0x80, 0x80, 0x80, |
+ base::TimeDelta())); |
+ VideoLayerImpl::FrameUnwrapper unwrapper = |
+ base::Bind(FakeVideoFrame::toVideoFrame); |
FakeVideoFrameProvider provider; |
provider.setFrame(&videoFrame); |
- scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(layerId++, &provider); |
+ scoped_ptr<VideoLayerImpl> videoLayer = |
+ VideoLayerImpl::create(layerId++, &provider, unwrapper); |
videoLayer->setBounds(IntSize(10, 10)); |
videoLayer->setAnchorPoint(FloatPoint(0, 0)); |
videoLayer->setContentBounds(IntSize(10, 10)); |
@@ -2707,10 +2723,9 @@ TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
rootLayer->addChild(videoLayer.PassAs<LayerImpl>()); |
- FakeVideoFrame hwVideoFrame; |
FakeVideoFrameProvider hwProvider; |
- hwProvider.setFrame(&hwVideoFrame); |
- scoped_ptr<VideoLayerImpl> hwVideoLayer = VideoLayerImpl::create(layerId++, &hwProvider); |
+ scoped_ptr<VideoLayerImpl> hwVideoLayer = |
+ VideoLayerImpl::create(layerId++, &hwProvider, unwrapper); |
hwVideoLayer->setBounds(IntSize(10, 10)); |
hwVideoLayer->setAnchorPoint(FloatPoint(0, 0)); |
hwVideoLayer->setContentBounds(IntSize(10, 10)); |
@@ -2757,7 +2772,13 @@ TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
// Use a context that supports IOSurfaces |
m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).PassAs<GraphicsContext>()); |
- hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()); |
+ FakeVideoFrame hwVideoFrame( |
+ VideoFrame::WrapNativeTexture( |
+ m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture(), |
+ GL_TEXTURE_2D, |
+ gfx::Size(4, 4), gfx::Size(4, 4), base::TimeDelta(), |
+ VideoFrame::ReadPixelsCB(), base::Closure())); |
+ hwProvider.setFrame(&hwVideoFrame); |
m_hostImpl->setRootLayer(rootLayer.Pass()); |
@@ -2787,8 +2808,13 @@ TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
m_hostImpl->didDrawAllLayers(frame); |
m_hostImpl->swapBuffers(); |
- hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()); |
- hwProvider.setFrame(&hwVideoFrame); |
+ FakeVideoFrame hwVideoFrame2( |
+ VideoFrame::WrapNativeTexture( |
+ m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture(), |
+ GL_TEXTURE_2D, |
+ gfx::Size(4, 4), gfx::Size(4, 4), base::TimeDelta(), |
+ VideoFrame::ReadPixelsCB(), base::Closure())); |
+ hwProvider.setFrame(&hwVideoFrame2); |
EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
m_hostImpl->drawLayers(frame); |
@@ -2863,8 +2889,11 @@ TEST_P(LayerTreeHostImplTest, layersFreeTextures) |
textureLayer->setTextureId(1); |
rootLayer->addChild(textureLayer.PassAs<LayerImpl>()); |
+ VideoLayerImpl::FrameUnwrapper unwrapper = |
+ base::Bind(FakeVideoFrame::toVideoFrame); |
FakeVideoFrameProvider provider; |
- scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(4, &provider); |
+ scoped_ptr<VideoLayerImpl> videoLayer = |
+ VideoLayerImpl::create(4, &provider, unwrapper); |
videoLayer->setBounds(IntSize(10, 10)); |
videoLayer->setAnchorPoint(FloatPoint(0, 0)); |
videoLayer->setContentBounds(IntSize(10, 10)); |