| Index: remoting/ios/bridge/frame_consumer_bridge_unittest.cc
|
| diff --git a/remoting/ios/bridge/frame_consumer_bridge_unittest.cc b/remoting/ios/bridge/frame_consumer_bridge_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..30d63d0e326b07f04fb9b8f231c40140fb1a5760
|
| --- /dev/null
|
| +++ b/remoting/ios/bridge/frame_consumer_bridge_unittest.cc
|
| @@ -0,0 +1,138 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "remoting/ios/bridge/frame_consumer_bridge.h"
|
| +
|
| +#include <queue>
|
| +#include <gtest/gtest.h>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
|
| +#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
|
| +
|
| +namespace {
|
| +const webrtc::DesktopSize kFrameSize(100, 100);
|
| +const webrtc::DesktopVector kDpi(100, 100);
|
| +
|
| +const webrtc::DesktopRect FrameRect() {
|
| + return webrtc::DesktopRect::MakeSize(kFrameSize);
|
| +}
|
| +
|
| +webrtc::DesktopRegion FrameRegion() {
|
| + return webrtc::DesktopRegion(FrameRect());
|
| +}
|
| +
|
| +void FrameDelivery(const webrtc::DesktopSize& view_size,
|
| + webrtc::DesktopFrame* buffer,
|
| + const webrtc::DesktopRegion& region) {
|
| + ASSERT_TRUE(view_size.equals(kFrameSize));
|
| + ASSERT_TRUE(region.Equals(FrameRegion()));
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +namespace remoting {
|
| +
|
| +class FrameProducerTester : public FrameProducer {
|
| + public:
|
| + virtual ~FrameProducerTester() {};
|
| +
|
| + virtual void DrawBuffer(webrtc::DesktopFrame* buffer) OVERRIDE {
|
| + frames.push(buffer);
|
| + };
|
| +
|
| + virtual void InvalidateRegion(const webrtc::DesktopRegion& region) OVERRIDE {
|
| + NOTIMPLEMENTED();
|
| + };
|
| +
|
| + virtual void RequestReturnBuffers(const base::Closure& done) OVERRIDE {
|
| + // Don't have to actually return the buffers. This function is really
|
| + // saying don't use the references anymore, they are now invalid.
|
| + while (!frames.empty()) {
|
| + frames.pop();
|
| + }
|
| + done.Run();
|
| + };
|
| +
|
| + virtual void SetOutputSizeAndClip(const webrtc::DesktopSize& view_size,
|
| + const webrtc::DesktopRect& clip_area)
|
| + OVERRIDE {
|
| + viewSize = view_size;
|
| + clipArea = clip_area;
|
| + };
|
| +
|
| + std::queue<webrtc::DesktopFrame*> frames;
|
| + webrtc::DesktopSize viewSize;
|
| + webrtc::DesktopRect clipArea;
|
| +};
|
| +
|
| +class FrameConsumerBridgeTest : public ::testing::Test {
|
| + protected:
|
| + virtual void SetUp() OVERRIDE {
|
| + frameProducer_.reset(new FrameProducerTester());
|
| + frameConsumer_.reset(new FrameConsumerBridge(base::Bind(&FrameDelivery)));
|
| + frameConsumer_->Initialize(frameProducer_.get());
|
| + }
|
| + virtual void TearDown() OVERRIDE {}
|
| +
|
| + scoped_ptr<FrameProducerTester> frameProducer_;
|
| + scoped_ptr<FrameConsumerBridge> frameConsumer_;
|
| +};
|
| +
|
| +TEST(FrameConsumerBridgeTest_NotInitialized, CreateAndRelease) {
|
| + scoped_ptr<FrameConsumerBridge> frameConsumer_(
|
| + new FrameConsumerBridge(base::Bind(&FrameDelivery)));
|
| + ASSERT_TRUE(frameConsumer_.get() != NULL);
|
| + frameConsumer_.reset();
|
| + ASSERT_TRUE(frameConsumer_.get() == NULL);
|
| +}
|
| +
|
| +TEST_F(FrameConsumerBridgeTest, ApplyBuffer) {
|
| + webrtc::DesktopFrame* frame = NULL;
|
| + ASSERT_EQ(0, frameProducer_->frames.size());
|
| + frameConsumer_->SetSourceSize(kFrameSize, kDpi);
|
| + ASSERT_EQ(1, frameProducer_->frames.size());
|
| +
|
| + // Return the frame, and ensure we get it back
|
| + frame = frameProducer_->frames.front();
|
| + frameProducer_->frames.pop();
|
| + ASSERT_EQ(0, frameProducer_->frames.size());
|
| + frameConsumer_->ApplyBuffer(
|
| + kFrameSize, FrameRect(), frame, FrameRegion(), FrameRegion());
|
| + ASSERT_EQ(1, frameProducer_->frames.size());
|
| + ASSERT_TRUE(frame == frameProducer_->frames.front());
|
| + ASSERT_TRUE(frame->data() == frameProducer_->frames.front()->data());
|
| +
|
| + // Change the SourceSize, we should get a new frame, but when the old frame is
|
| + // submitted we will not get it back.
|
| + frameConsumer_->SetSourceSize(webrtc::DesktopSize(1, 1), kDpi);
|
| + ASSERT_EQ(2, frameProducer_->frames.size());
|
| + frame = frameProducer_->frames.front();
|
| + frameProducer_->frames.pop();
|
| + ASSERT_EQ(1, frameProducer_->frames.size());
|
| + frameConsumer_->ApplyBuffer(
|
| + kFrameSize, FrameRect(), frame, FrameRegion(), FrameRegion());
|
| + ASSERT_EQ(1, frameProducer_->frames.size());
|
| +}
|
| +
|
| +TEST_F(FrameConsumerBridgeTest, SetSourceSize) {
|
| + frameConsumer_->SetSourceSize(webrtc::DesktopSize(0, 0),
|
| + webrtc::DesktopVector(0, 0));
|
| + ASSERT_TRUE(frameProducer_->viewSize.equals(webrtc::DesktopSize(0, 0)));
|
| + ASSERT_TRUE(frameProducer_->clipArea.equals(
|
| + webrtc::DesktopRect::MakeLTRB(0, 0, 0, 0)));
|
| + ASSERT_EQ(1, frameProducer_->frames.size());
|
| + ASSERT_TRUE(
|
| + frameProducer_->frames.front()->size().equals(webrtc::DesktopSize(0, 0)));
|
| +
|
| + frameConsumer_->SetSourceSize(kFrameSize, kDpi);
|
| + ASSERT_TRUE(frameProducer_->viewSize.equals(kFrameSize));
|
| + ASSERT_TRUE(frameProducer_->clipArea.equals(FrameRect()));
|
| + ASSERT_EQ(2, frameProducer_->frames.size());
|
| + frameProducer_->frames.pop();
|
| + ASSERT_TRUE(frameProducer_->frames.front()->size().equals(kFrameSize));
|
| +}
|
| +
|
| +} // namespace remoting
|
|
|