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

Unified Diff: chrome/browser/jankometer.cc

Issue 155194: linux: port Jankometer (Closed)
Patch Set: ok Created 11 years, 5 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
« no previous file with comments | « chrome/browser/jankometer.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/jankometer.cc
diff --git a/chrome/browser/jankometer.cc b/chrome/browser/jankometer.cc
index c7bb0a5acafb2da953fe926a361726bccc7a690a..14028c73e5d21abc7d02b25a8af08fdbe1683c1a 100644
--- a/chrome/browser/jankometer.cc
+++ b/chrome/browser/jankometer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -16,9 +16,14 @@
#include "base/thread.h"
#include "base/time.h"
#include "base/watchdog.h"
+#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/common/chrome_switches.h"
+#if defined(OS_LINUX)
+#include "chrome/common/gtk_util.h"
+#endif
+
using base::TimeDelta;
using base::TimeTicks;
@@ -109,33 +114,20 @@ class JankObserver : public base::RefCountedThreadSafe<JankObserver>,
MessageLoopForUI::current()->RemoveObserver(this);
}
- void WillProcessMessage(const MSG& msg) {
- begin_process_message_ = TimeTicks::Now();
-
- // GetMessageTime returns a LONG (signed 32-bit) and GetTickCount returns
- // a DWORD (unsigned 32-bit). They both wrap around when the time is longer
- // than they can hold. I'm not sure if GetMessageTime wraps around to 0,
- // or if the original time comes from GetTickCount, it might wrap around
- // to -1.
- //
- // Therefore, I cast to DWORD so if it wraps to -1 we will correct it. If
- // it doesn't, then our time delta will be negative if a message happens
- // to straddle the wraparound point, it will still be OK.
- DWORD cur_message_issue_time = static_cast<DWORD>(msg.time);
- DWORD cur_time = GetTickCount();
- queueing_time_ = TimeDelta::FromMilliseconds(cur_time
- - cur_message_issue_time);
+ void StartProcessingTimers() {
// Simulate arming when the message entered the queue.
total_time_watchdog_.ArmSomeTimeDeltaAgo(queueing_time_);
if (queueing_time_ > MaxMessageDelay_) {
// Message is too delayed.
queueing_delay_counter_.Increment();
+#if defined(OS_WIN)
if (kPlaySounds)
MessageBeep(MB_ICONASTERISK);
+#endif
}
}
- void DidProcessMessage(const MSG& msg) {
+ void EndProcessingTimers() {
total_time_watchdog_.Disarm();
TimeTicks now = TimeTicks::Now();
if (begin_process_message_ != TimeTicks()) {
@@ -147,14 +139,62 @@ class JankObserver : public base::RefCountedThreadSafe<JankObserver>,
TimeDelta::FromMilliseconds(kMaxMessageProcessingMs)) {
// Message took too long to process.
slow_processing_counter_.Increment();
+#if defined(OS_WIN)
if (kPlaySounds)
MessageBeep(MB_ICONHAND);
+#endif
}
}
+#if defined(OS_WIN)
+ void WillProcessMessage(const MSG& msg) {
+ begin_process_message_ = TimeTicks::Now();
+
+ // GetMessageTime returns a LONG (signed 32-bit) and GetTickCount returns
+ // a DWORD (unsigned 32-bit). They both wrap around when the time is longer
+ // than they can hold. I'm not sure if GetMessageTime wraps around to 0,
+ // or if the original time comes from GetTickCount, it might wrap around
+ // to -1.
+ //
+ // Therefore, I cast to DWORD so if it wraps to -1 we will correct it. If
+ // it doesn't, then our time delta will be negative if a message happens
+ // to straddle the wraparound point, it will still be OK.
+ DWORD cur_message_issue_time = static_cast<DWORD>(msg.time);
+ DWORD cur_time = GetTickCount();
+ queueing_time_ =
+ base::TimeDelta::FromMilliseconds(cur_time - cur_message_issue_time);
+
+ StartProcessingTimers();
+ }
+
+ void DidProcessMessage(const MSG& msg) {
+ EndProcessingTimers();
+ }
+
+#elif defined(OS_LINUX)
+ void WillProcessEvent(GdkEvent* event) {
+ begin_process_message_ = TimeTicks::Now();
+ guint event_time = event_utils::GetGdkEventTime(event);
+ // TODO(evanm): it is not clear what that event_time is relative to!
+ queueing_time_ = false // TODO: We ignore event_time for now.
+ ? base::TimeDelta::FromMilliseconds(event_time)
+ : base::TimeDelta::FromMilliseconds(0);
+ StartProcessingTimers();
+ }
+
+ void DidProcessEvent(GdkEvent* event) {
+ EndProcessingTimers();
+ }
+#endif
+
private:
const TimeDelta MaxMessageDelay_;
+
+ // Time at which the current message processing began.
TimeTicks begin_process_message_;
+
+ // Time the current message spent in the queue -- delta between message
+ // construction time and message processing time.
TimeDelta queueing_time_;
// Counters for the two types of jank we measure.
@@ -173,7 +213,7 @@ JankObserver* io_observer = NULL;
} // namespace
-void InstallJankometer(const CommandLine &parsed_command_line) {
+void InstallJankometer(const CommandLine& parsed_command_line) {
if (ui_observer || io_observer) {
NOTREACHED() << "Initializing jank-o-meter twice";
return;
« no previous file with comments | « chrome/browser/jankometer.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698