core_times_unittest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Copyright 2022 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. #include "services/device/compute_pressure/core_times.h"
  5. #include <vector>
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. namespace device {
  8. using CoreTimesTest = testing::Test;
  9. TEST_F(CoreTimesTest, TimeUtilization_Balanced) {
  10. CoreTimes baseline({105, 205, 305, 405, 505, 605, 705, 805, 905, 1005});
  11. std::vector<CoreTimes> test_cases = {
  12. // Individual components get summed up correctly.
  13. CoreTimes({115, 205, 305, 415, 505, 605, 705, 805, 905, 1005}),
  14. CoreTimes({105, 215, 305, 415, 505, 605, 705, 805, 905, 1005}),
  15. CoreTimes({105, 205, 315, 415, 505, 605, 705, 805, 905, 1005}),
  16. CoreTimes({105, 205, 305, 415, 505, 615, 705, 805, 905, 1005}),
  17. CoreTimes({105, 205, 305, 415, 505, 605, 715, 805, 905, 1005}),
  18. CoreTimes({105, 205, 305, 415, 505, 605, 705, 815, 905, 1005}),
  19. // Ignored components are not added to the sum.
  20. CoreTimes({115, 205, 305, 415, 595, 605, 705, 805, 905, 1005}),
  21. CoreTimes({115, 205, 305, 415, 505, 605, 705, 805, 995, 1005}),
  22. CoreTimes({115, 205, 305, 415, 505, 605, 705, 805, 905, 1095}),
  23. // Negative changes in ignored components are not flagged.
  24. CoreTimes({115, 205, 305, 415, 500, 605, 705, 805, 905, 1005}),
  25. CoreTimes({115, 205, 305, 415, 505, 605, 705, 805, 900, 1005}),
  26. CoreTimes({115, 205, 305, 415, 505, 605, 705, 805, 905, 1000}),
  27. };
  28. for (const CoreTimes& times : test_cases) {
  29. SCOPED_TRACE(times.times_);
  30. EXPECT_EQ(0.5, times.TimeUtilization(baseline));
  31. }
  32. }
  33. TEST_F(CoreTimesTest, TimeUtilization_EmptyRange) {
  34. CoreTimes baseline({105, 205, 305, 405, 505, 605, 705, 805, 905, 1005});
  35. std::vector<CoreTimes> test_cases = {
  36. // Identical times.
  37. CoreTimes({105, 205, 305, 405, 505, 605, 705, 805, 905, 1005}),
  38. // Changes in ignored components.
  39. CoreTimes({105, 205, 305, 405, 515, 605, 705, 805, 905, 1005}),
  40. CoreTimes({105, 205, 305, 405, 505, 605, 705, 805, 915, 1005}),
  41. CoreTimes({105, 205, 305, 405, 505, 605, 705, 805, 905, 1015}),
  42. };
  43. for (const CoreTimes& times : test_cases) {
  44. SCOPED_TRACE(times.times_);
  45. EXPECT_EQ(-1, times.TimeUtilization(baseline));
  46. }
  47. }
  48. TEST_F(CoreTimesTest, TimeUtilization_NegativeRange) {
  49. CoreTimes baseline({105, 205, 305, 405, 505, 605, 705, 805, 905, 1005});
  50. std::vector<CoreTimes> test_cases = {
  51. CoreTimes({100, 205, 305, 415, 505, 605, 705, 805, 905, 1005}),
  52. CoreTimes({105, 200, 305, 415, 505, 605, 705, 805, 905, 1005}),
  53. CoreTimes({105, 205, 300, 415, 505, 605, 705, 805, 905, 1005}),
  54. CoreTimes({115, 205, 305, 400, 505, 605, 705, 805, 905, 1005}),
  55. CoreTimes({105, 205, 305, 415, 505, 600, 705, 805, 905, 1005}),
  56. CoreTimes({105, 205, 305, 415, 505, 605, 700, 805, 905, 1005}),
  57. CoreTimes({105, 205, 305, 415, 505, 605, 705, 800, 905, 1005}),
  58. };
  59. for (const CoreTimes& times : test_cases) {
  60. SCOPED_TRACE(times.times_);
  61. EXPECT_EQ(-1, times.TimeUtilization(baseline));
  62. }
  63. }
  64. TEST_F(CoreTimesTest, TimeUtilization_Computation) {
  65. CoreTimes baseline({105, 205, 305, 405, 505, 605, 705, 805, 905, 1005});
  66. struct TestCase {
  67. CoreTimes times;
  68. double utilization;
  69. };
  70. std::vector<TestCase> test_cases = {
  71. // No idling.
  72. {CoreTimes({115, 205, 305, 405, 505, 605, 705, 805, 905, 1005}), 1.0},
  73. {CoreTimes({115, 215, 305, 405, 505, 605, 705, 805, 905, 1005}), 1.0},
  74. {CoreTimes({115, 215, 315, 405, 505, 605, 705, 805, 905, 1005}), 1.0},
  75. {CoreTimes({115, 215, 315, 405, 505, 615, 705, 805, 905, 1005}), 1.0},
  76. {CoreTimes({115, 215, 315, 405, 505, 615, 715, 805, 905, 1005}), 1.0},
  77. {CoreTimes({115, 215, 315, 405, 505, 615, 715, 815, 905, 1005}), 1.0},
  78. // All idling.
  79. {CoreTimes({105, 205, 305, 415, 505, 605, 705, 805, 905, 1005}), 0.0},
  80. // Fractions
  81. {CoreTimes({115, 225, 305, 415, 505, 605, 705, 805, 905, 1005}), 0.75},
  82. {CoreTimes({115, 225, 345, 415, 505, 605, 705, 805, 905, 1005}), 0.875},
  83. {CoreTimes({115, 205, 305, 435, 505, 605, 705, 805, 905, 1005}), 0.25},
  84. {CoreTimes({115, 205, 305, 475, 505, 605, 705, 805, 905, 1005}), 0.125},
  85. };
  86. for (const TestCase& test_case : test_cases) {
  87. SCOPED_TRACE(test_case.times.times_);
  88. EXPECT_EQ(test_case.utilization, test_case.times.TimeUtilization(baseline));
  89. }
  90. }
  91. } // namespace device