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

Unified Diff: remoting/host/resizing_host_observer_unittest.cc

Issue 15927033: Add host-side rate-limiting to desktop resize events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Made unit-test less sensitive to timing. Created 7 years, 6 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
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

Powered by Google App Engine
This is Rietveld 408576698