17687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki/* 27687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * Copyright (C) 2010 The Android Open Source Project 37687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * 47687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 57687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * you may not use this file except in compliance with the License. 67687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * You may obtain a copy of the License at 77687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * 87687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 97687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * 107687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * Unless required by applicable law or agreed to in writing, software 117687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 127687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * See the License for the specific language governing permissions and 147687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * limitations under the License. 157687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki */ 167687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 177687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onukipackage com.android.email; 187687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 1931d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blankimport com.android.emailcommon.Logging; 20560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedyimport com.android.mail.utils.LogUtils; 2131d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank 227687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onukiimport android.os.SystemClock; 237687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 247687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki/** 257687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * A simple class to measure elapsed time. 267687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * 277687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * <code> 287687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * StopWatch s = StopWatch.start(); 297687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * // Do your stuff 307687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * s.split(); 317687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * // More stuff 327687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * s.split(); 337687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * // More stuff 347687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * s.stop(); 357687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki * </code> 367687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki */ 377687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onukipublic class StopWatch { 387687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki private final String mName; 397687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki private final long mStart; 407687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki private long mLastSplit; 417687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 427687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki private StopWatch(String name) { 437687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki mName = name; 447687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki mStart = getCurrentTime(); 457687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki mLastSplit = mStart; 46560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "StopWatch(" + mName + ") start"); 477687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki } 487687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 497687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki public static StopWatch start(String name) { 507687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki return new StopWatch(name); 517687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki } 527687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 537687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki public void split(String label) { 547687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki long now = getCurrentTime() ; 557687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki long elapse = now - mLastSplit; 56560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "StopWatch(" + mName + ") split(" + label + ") " + elapse); 577687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki mLastSplit = now; 587687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki } 597687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 607687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki public void stop() { 617687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki long now = getCurrentTime(); 62560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.w(Logging.LOG_TAG, "StopWatch(" + mName + ") stop: " 637687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki + (now - mLastSplit) 647687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki + " (total " + (now - mStart) + ")"); 657687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki } 667687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki 677687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki private static long getCurrentTime() { 687687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki // We might want to use other counters, such as currentThreadTimeMillis(). 697687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki // TODO add option for that? 707687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki return SystemClock.elapsedRealtime(); 717687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki } 727687f05f7bd02a4400e340eeb05cd296c34da42aMakoto Onuki} 73