summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metrics/thread_watcher_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/metrics/thread_watcher_unittest.cc')
-rw-r--r--chrome/browser/metrics/thread_watcher_unittest.cc82
1 files changed, 38 insertions, 44 deletions
diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc
index 52a4288..efb978b 100644
--- a/chrome/browser/metrics/thread_watcher_unittest.cc
+++ b/chrome/browser/metrics/thread_watcher_unittest.cc
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#if 0
-
#include "base/basictypes.h"
#include "base/logging.h"
#include "base/message_loop.h"
@@ -13,6 +11,7 @@
#include "base/synchronization/lock.h"
#include "base/threading/platform_thread.h"
#include "base/time.h"
+#include "build/build_config.h"
#include "chrome/browser/metrics/thread_watcher.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
@@ -52,6 +51,8 @@ class CustomThreadWatcher : public ThreadWatcher {
uint64 pong_received_;
uint64 success_response_;
uint64 failed_response_;
+ base::TimeTicks saved_ping_time_;
+ uint64 saved_ping_sequence_number_;
CustomThreadWatcher(const BrowserThread::ID thread_id,
const std::string thread_name,
@@ -65,7 +66,9 @@ class CustomThreadWatcher : public ThreadWatcher {
ping_sent_(0),
pong_received_(0),
success_response_(0),
- failed_response_(0) {
+ failed_response_(0),
+ saved_ping_time_(base::TimeTicks::Now()),
+ saved_ping_sequence_number_(0) {
}
State UpdateState(State new_state) {
@@ -75,6 +78,12 @@ class CustomThreadWatcher : public ThreadWatcher {
old_state = thread_watcher_state_;
if (old_state != DEACTIVATED)
thread_watcher_state_ = new_state;
+ if (new_state == SENT_PING)
+ ++ping_sent_;
+ if (new_state == RECEIVED_PONG)
+ ++pong_received_;
+ saved_ping_time_ = ping_time();
+ saved_ping_sequence_number_ = ping_sequence_number();
}
state_changed_.Broadcast();
// LOG(INFO) << "UpdateState: thread_name_: " << thread_name_ <<
@@ -112,11 +121,9 @@ class CustomThreadWatcher : public ThreadWatcher {
State old_state = UpdateState(SENT_PING);
EXPECT_TRUE(old_state == ACTIVATED || old_state == RECEIVED_PONG);
ThreadWatcher::PostPingMessage();
- ++ping_sent_;
}
void OnPongMessage(uint64 ping_sequence_number) {
- ++pong_received_;
State old_state = UpdateState(RECEIVED_PONG);
EXPECT_TRUE(old_state == SENT_PING || old_state == DEACTIVATED);
ThreadWatcher::OnPongMessage(ping_sequence_number);
@@ -146,7 +153,7 @@ class CustomThreadWatcher : public ThreadWatcher {
}
void VeryLongMethod(TimeDelta wait_time) {
- DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::WATCHDOG));
+ DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread());
TimeTicks end_time = TimeTicks::Now() + wait_time;
{
base::AutoLock auto_lock(custom_lock_);
@@ -161,7 +168,7 @@ class CustomThreadWatcher : public ThreadWatcher {
}
State WaitForStateChange(const TimeDelta& wait_time, State expected_state) {
- DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::WATCHDOG));
+ DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread());
UpdateWaitState(STARTED_WAITING);
State exit_state;
@@ -196,7 +203,7 @@ class CustomThreadWatcher : public ThreadWatcher {
CheckResponseState WaitForCheckResponse(const TimeDelta& wait_time,
CheckResponseState expected_state) {
- DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::WATCHDOG));
+ DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread());
UpdateWaitState(STARTED_WAITING);
CheckResponseState exit_state;
@@ -245,13 +252,9 @@ class ThreadWatcherTest : public ::testing::Test {
CustomThreadWatcher* webkit_watcher_;
ThreadWatcherTest() {
- }
-
- protected:
- virtual void SetUp() {
webkit_thread_.reset(new BrowserThread(BrowserThread::WEBKIT));
io_thread_.reset(new BrowserThread(BrowserThread::IO));
- watchdog_thread_.reset(new BrowserThread(BrowserThread::WATCHDOG));
+ watchdog_thread_.reset(new WatchDogThread());
webkit_thread_->Start();
io_thread_->Start();
watchdog_thread_->Start();
@@ -268,7 +271,10 @@ class ThreadWatcherTest : public ::testing::Test {
webkit_thread_id, webkit_thread_name, kSleepTime, kUnresponsiveTime);
}
- virtual void TearDown() {
+ ~ThreadWatcherTest() {
+ ThreadWatcherList::StopWatchingAll();
+ io_watcher_ = NULL;
+ webkit_watcher_ = NULL;
// io_thread_->Stop();
// webkit_thread_->Stop();
// watchdog_thread_->Stop();
@@ -281,7 +287,7 @@ class ThreadWatcherTest : public ::testing::Test {
private:
scoped_ptr<BrowserThread> webkit_thread_;
scoped_ptr<BrowserThread> io_thread_;
- scoped_ptr<BrowserThread> watchdog_thread_;
+ scoped_ptr<WatchDogThread> watchdog_thread_;
ThreadWatcherList* thread_watcher_list_;
};
@@ -319,14 +325,13 @@ TEST_F(ThreadWatcherTest, Registration) {
// Test ActivateThreadWatching and DeActivateThreadWatching of IO thread. This
// method also checks that pong message was sent by the watched thread and pong
-// message was received by the WATCHDOG thread. It also checks that
+// message was received by the WatchDogThread. It also checks that
// OnCheckResponsiveness has verified the ping-pong mechanism and the watched
// thread is not hung.
TEST_F(ThreadWatcherTest, ThreadResponding) {
TimeTicks time_before_ping = TimeTicks::Now();
// Activate watching IO thread.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::ActivateThreadWatching));
@@ -339,8 +344,8 @@ TEST_F(ThreadWatcherTest, ThreadResponding) {
EXPECT_GT(io_watcher_->ping_sent_, static_cast<uint64>(0));
EXPECT_GT(io_watcher_->pong_received_, static_cast<uint64>(0));
EXPECT_TRUE(io_watcher_->active());
- EXPECT_GE(io_watcher_->ping_time_, time_before_ping);
- EXPECT_GE(io_watcher_->ping_sequence_number_, static_cast<uint64>(0));
+ EXPECT_GE(io_watcher_->saved_ping_time_, time_before_ping);
+ EXPECT_GE(io_watcher_->saved_ping_sequence_number_, static_cast<uint64>(0));
// Verify watched thread is responding with ping/pong messaging.
io_watcher_->WaitForCheckResponse(
@@ -349,8 +354,7 @@ TEST_F(ThreadWatcherTest, ThreadResponding) {
EXPECT_EQ(io_watcher_->failed_response_, static_cast<uint64>(0));
// DeActivate thread watching for shutdown.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::DeActivateThreadWatching));
}
@@ -371,8 +375,7 @@ TEST_F(ThreadWatcherTest, ThreadNotResponding) {
kUnresponsiveTime * 10));
// Activate thread watching.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::ActivateThreadWatching));
@@ -383,8 +386,7 @@ TEST_F(ThreadWatcherTest, ThreadNotResponding) {
EXPECT_GT(io_watcher_->failed_response_, static_cast<uint64>(0));
// DeActivate thread watching for shutdown.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::DeActivateThreadWatching));
}
@@ -392,14 +394,13 @@ TEST_F(ThreadWatcherTest, ThreadNotResponding) {
// Test watching of multiple threads with all threads not responding.
TEST_F(ThreadWatcherTest, MultipleThreadsResponding) {
// Check for WEBKIT thread to perform ping/pong messaging.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(
webkit_watcher_, &ThreadWatcher::ActivateThreadWatching));
+
// Check for IO thread to perform ping/pong messaging.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::ActivateThreadWatching));
@@ -422,12 +423,11 @@ TEST_F(ThreadWatcherTest, MultipleThreadsResponding) {
EXPECT_EQ(io_watcher_->failed_response_, static_cast<uint64>(0));
// DeActivate thread watching for shutdown.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::DeActivateThreadWatching));
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(
webkit_watcher_, &ThreadWatcher::DeActivateThreadWatching));
@@ -446,15 +446,13 @@ TEST_F(ThreadWatcherTest, MultipleThreadsNotResponding) {
kUnresponsiveTime * 10));
// Activate watching of WEBKIT thread.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(
webkit_watcher_, &ThreadWatcher::ActivateThreadWatching));
// Activate watching of IO thread.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::ActivateThreadWatching));
@@ -471,15 +469,11 @@ TEST_F(ThreadWatcherTest, MultipleThreadsNotResponding) {
EXPECT_GT(io_watcher_->failed_response_, static_cast<uint64>(0));
// DeActivate thread watching for shutdown.
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(io_watcher_, &ThreadWatcher::DeActivateThreadWatching));
- BrowserThread::PostTask(
- BrowserThread::WATCHDOG,
+ WatchDogThread::PostTask(
FROM_HERE,
NewRunnableMethod(
webkit_watcher_, &ThreadWatcher::DeActivateThreadWatching));
}
-
-#endif // 0