Home | History | Annotate | Download | only in host
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "remoting/host/capture_scheduler.h"
      6 #include "testing/gtest/include/gtest/gtest.h"
      7 
      8 namespace remoting {
      9 
     10 static const int kTestInputs[] = { 100, 50, 30, 20, 10, 30, 60, 80 };
     11 
     12 TEST(CaptureSchedulerTest, SingleSampleSameTimes) {
     13   const int kTestResults[][arraysize(kTestInputs)] = {
     14     { 400, 200, 120, 80, 50, 120, 240, 320 }, // One core.
     15     { 200, 100, 60, 50, 50, 60, 120, 160 },   // Two cores.
     16     { 100, 50, 50, 50, 50, 50, 60, 80 },      // Four cores.
     17     { 50, 50, 50, 50, 50, 50, 50, 50 }        // Eight cores.
     18   };
     19 
     20   for (size_t i = 0; i < arraysize(kTestResults); ++i) {
     21     for (size_t j = 0; j < arraysize(kTestInputs); ++j) {
     22       CaptureScheduler scheduler;
     23       scheduler.SetNumOfProcessorsForTest(1 << i);
     24       scheduler.RecordCaptureTime(
     25           base::TimeDelta::FromMilliseconds(kTestInputs[j]));
     26       scheduler.RecordEncodeTime(
     27           base::TimeDelta::FromMilliseconds(kTestInputs[j]));
     28       EXPECT_EQ(kTestResults[i][j],
     29                 scheduler.NextCaptureDelay().InMilliseconds());
     30     }
     31   }
     32 }
     33 
     34 TEST(CaptureSchedulerTest, SingleSampleDifferentTimes) {
     35   const int kTestResults[][arraysize(kTestInputs)] = {
     36     { 360, 220, 120, 60, 60, 120, 220, 360 }, // One core.
     37     { 180, 110, 60, 50, 50, 60, 110, 180 },   // Two cores.
     38     { 90, 55, 50, 50, 50, 50, 55, 90 },       // Four cores.
     39     { 50, 50, 50, 50, 50, 50, 50, 50 }        // Eight cores.
     40   };
     41 
     42   for (size_t i = 0; i < arraysize(kTestResults); ++i) {
     43     for (size_t j = 0; j < arraysize(kTestInputs); ++j) {
     44       CaptureScheduler scheduler;
     45       scheduler.SetNumOfProcessorsForTest(1 << i);
     46       scheduler.RecordCaptureTime(
     47           base::TimeDelta::FromMilliseconds(kTestInputs[j]));
     48       scheduler.RecordEncodeTime(
     49           base::TimeDelta::FromMilliseconds(
     50               kTestInputs[arraysize(kTestInputs) - 1 - j]));
     51       EXPECT_EQ(kTestResults[i][j],
     52                 scheduler.NextCaptureDelay().InMilliseconds());
     53     }
     54   }
     55 }
     56 
     57 TEST(CaptureSchedulerTest, RollingAverageDifferentTimes) {
     58   const int kTestResults[][arraysize(kTestInputs)] = {
     59     { 360, 290, 233, 133, 80, 80, 133, 233 }, // One core.
     60     { 180, 145, 116, 66, 50, 50, 66, 116 },   // Two cores.
     61     { 90, 72, 58, 50, 50, 50, 50, 58 },       // Four cores.
     62     { 50, 50, 50, 50, 50, 50, 50, 50 }        // Eight cores.
     63   };
     64 
     65   for (size_t i = 0; i < arraysize(kTestResults); ++i) {
     66     CaptureScheduler scheduler;
     67     scheduler.SetNumOfProcessorsForTest(1 << i);
     68     for (size_t j = 0; j < arraysize(kTestInputs); ++j) {
     69       scheduler.RecordCaptureTime(
     70           base::TimeDelta::FromMilliseconds(kTestInputs[j]));
     71       scheduler.RecordEncodeTime(
     72           base::TimeDelta::FromMilliseconds(
     73               kTestInputs[arraysize(kTestInputs) - 1 - j]));
     74       EXPECT_EQ(kTestResults[i][j],
     75                 scheduler.NextCaptureDelay().InMilliseconds());
     76     }
     77   }
     78 }
     79 
     80 }  // namespace remoting
     81