Index: remoting/host/resizing_host_observer_unittest.cc |
diff --git a/remoting/host/resizing_host_observer_unittest.cc b/remoting/host/resizing_host_observer_unittest.cc |
index 2d61e5e4e8dd312d0f1508e028d303c2bf2cc31e..a4b943b9ffe4ed40b18028f75f31ad7040ee41aa 100644 |
--- a/remoting/host/resizing_host_observer_unittest.cc |
+++ b/remoting/host/resizing_host_observer_unittest.cc |
@@ -6,6 +6,9 @@ |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/message_loop.h" |
+#include "base/run_loop.h" |
#include "remoting/host/desktop_resizer.h" |
#include "remoting/host/resizing_host_observer.h" |
#include "remoting/host/screen_resolution.h" |
@@ -69,9 +72,27 @@ class FakeDesktopResizer : public DesktopResizer { |
int set_size_call_count_; |
}; |
+class AutoIncrementNow : public base::RefCountedThreadSafe<AutoIncrementNow> { |
+ public: |
+ AutoIncrementNow() : now_(base::Time::Now()) { |
+ } |
+ virtual ~AutoIncrementNow() { } |
+ |
+ base::Time Now() { |
+ base::Time result = now_; |
+ now_ += base::TimeDelta::FromSeconds(10); |
+ return result; |
+ } |
+ |
+ private: |
+ base::Time now_; |
+}; |
+ |
class ResizingHostObserverTest : public testing::Test { |
public: |
- ResizingHostObserverTest() : desktop_resizer_(NULL) { |
+ ResizingHostObserverTest() |
+ : desktop_resizer_(NULL), |
+ now_function_(new AutoIncrementNow) { |
} |
void SetDesktopResizer(scoped_ptr<FakeDesktopResizer> desktop_resizer) { |
@@ -80,6 +101,8 @@ class ResizingHostObserverTest : public testing::Test { |
resizing_host_observer_.reset( |
new ResizingHostObserver(desktop_resizer.PassAs<DesktopResizer>())); |
+ resizing_host_observer_->SetNowFunctionForTesting( |
+ base::Bind(&AutoIncrementNow::Now, now_function_)); |
alexeypa (please no reviews)
2013/06/07 19:50:25
AutoIncrementNow::Now does not need to be in a sep
Jamie
2013/06/07 20:20:14
Done.
|
} |
SkISize GetBestSize(const SkISize& client_size) { |
@@ -98,9 +121,10 @@ class ResizingHostObserverTest : public testing::Test { |
} |
} |
- private: |
+ protected: |
scoped_ptr<ResizingHostObserver> resizing_host_observer_; |
FakeDesktopResizer* desktop_resizer_; |
+ scoped_refptr<AutoIncrementNow> now_function_; |
}; |
// Check that the host is not resized if GetSupportedSizes returns an empty |
@@ -191,4 +215,54 @@ TEST_F(ResizingHostObserverTest, NoSetSizeForSameSize) { |
EXPECT_EQ(desktop_resizer->set_size_call_count(), 0); |
} |
+class ManualIncrementNow : |
+ public base::RefCountedThreadSafe<ManualIncrementNow> { |
+ public: |
+ ManualIncrementNow() : now_(base::Time::Now()) { |
+ } |
+ virtual ~ManualIncrementNow() { } |
+ |
+ base::Time Now() { |
+ return now_; |
+ } |
+ |
+ void Increment(const base::TimeDelta& delta) { |
+ now_ += delta; |
+ }; |
+ |
+ private: |
+ base::Time now_; |
+}; |
+ |
+// Check that desktop resizes are rate-limited, and that if multiple resize |
+// requests are received in the time-out period, the most recent is respected. |
+TEST_F(ResizingHostObserverTest, RateLimited) { |
+ FakeDesktopResizer* desktop_resizer = |
+ new FakeDesktopResizer(SkISize::Make(640, 480), true, NULL, 0); |
+ SetDesktopResizer(scoped_ptr<FakeDesktopResizer>(desktop_resizer)); |
+ scoped_refptr<ManualIncrementNow> now_function(new ManualIncrementNow); |
+ resizing_host_observer_->SetNowFunctionForTesting( |
+ base::Bind(&ManualIncrementNow::Now, now_function)); |
+ |
+ base::MessageLoop message_loop; |
+ base::RunLoop run_loop; |
+ |
+ EXPECT_EQ(GetBestSize(SkISize::Make(100, 100)), SkISize::Make(100, 100)); |
+ now_function->Increment(base::TimeDelta::FromMilliseconds(900)); |
+ EXPECT_EQ(GetBestSize(SkISize::Make(200, 200)), SkISize::Make(100, 100)); |
+ now_function->Increment(base::TimeDelta::FromMilliseconds(99)); |
+ EXPECT_EQ(GetBestSize(SkISize::Make(300, 300)), SkISize::Make(100, 100)); |
+ now_function->Increment(base::TimeDelta::FromMilliseconds(1)); |
alexeypa (please no reviews)
2013/06/07 19:50:25
nit: remove this line.
Jamie
2013/06/07 20:20:14
It's needed, otherwise when the delayed resize hap
|
+ |
+ // The most recent resize was requested 999ms after the first, so it should |
+ // be processed within 1ms. |
alexeypa (please no reviews)
2013/06/07 19:50:25
Mention that |kDefaultMinimumResizeIntervalMs| mus
Jamie
2013/06/07 20:20:14
Done.
|
+ message_loop.PostDelayedTask( |
+ FROM_HERE, |
+ run_loop.QuitClosure(), |
+ base::TimeDelta::FromMilliseconds(1)); |
alexeypa (please no reviews)
2013/06/07 19:50:25
nit: Make it 2ms
Jamie
2013/06/07 20:20:14
Done.
|
+ run_loop.Run(); |
+ |
+ EXPECT_EQ(desktop_resizer_->GetCurrentSize(), SkISize::Make(300, 300)); |
+} |
+ |
} // namespace remoting |