Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(948)

Unified Diff: remoting/ios/bridge/frame_consumer_bridge_unittest.cc

Issue 186733007: iOS Chromoting Client (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/ios/bridge/frame_consumer_bridge.cc ('k') | remoting/ios/bridge/host_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « remoting/ios/bridge/frame_consumer_bridge.cc ('k') | remoting/ios/bridge/host_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698