15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/hi_res_timer_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/power_monitor/power_monitor.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/power_monitor/power_monitor_device_source.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace base { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/114048 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(HiResTimerManagerTest, DISABLED_ToggleOnOff) { 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop loop; 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<base::PowerMonitorSource> power_monitor_source( 21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new base::PowerMonitorDeviceSource()); 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<base::PowerMonitor> power_monitor( 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) new base::PowerMonitor(power_monitor_source.Pass())); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HighResolutionTimerManager manager; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At this point, we don't know if the high resolution timers are on or off, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it depends on what system the tests are running on (for example, if this 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // test is running on a laptop/battery, then the PowerMonitor would have 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already set the PowerState to battery power; but if we're running on a 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // desktop, then the PowerState will be non-battery power). Simulate a power 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // level change to get to a deterministic state. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnPowerStateChange(/* on_battery */ false); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loop a few times to test power toggling. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int loop = 2; loop >= 0; --loop) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The manager has the high resolution clock enabled now. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.hi_res_clock_available()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the Time class has it off, because it hasn't been activated. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(base::Time::IsHighResolutionTimerInUse()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the high resolution timer. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::ActivateHighResolutionTimer(true); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::Time::IsHighResolutionTimerInUse()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a on-battery power event. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnPowerStateChange(/* on_battery */ true); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.hi_res_clock_available()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(base::Time::IsHighResolutionTimerInUse()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a off-battery power event. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnPowerStateChange(/* on_battery */ false); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.hi_res_clock_available()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::Time::IsHighResolutionTimerInUse()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // De-activate the high resolution timer. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::ActivateHighResolutionTimer(false); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace base 62