13e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/*
23e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Copyright (C) 2009 The Android Open Source Project
33e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
43e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
53e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * you may not use this file except in compliance with the License.
63e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * You may obtain a copy of the License at
73e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
83e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
93e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * See the License for the specific language governing permissions and
143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * limitations under the License.
153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */
163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpackage com.android.quicksearchbox;
183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
19f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringertimport android.os.SystemClock;
203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/**
22f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert * Tracks latency in wall-clock time. Since {@link #getLatency} returns an {@code int},
23f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert * latencies over 2^31 ms (~ 25 days) cannot be measured.
24f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert * This class uses {@link SystemClock#uptimeMillis} which does not advance during deep sleep.
253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */
263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpublic class LatencyTracker {
273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    /**
29f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert     * Start time, in milliseconds as returned by {@link SystemClock#uptimeMillis}.
303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     */
31f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert    private long mStartTime;
323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    /**
34f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert     * Creates a new latency tracker and sets the start time.
353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     */
36f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert    public LatencyTracker() {
37f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert        mStartTime = SystemClock.uptimeMillis();
383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    /**
41f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert     * Resets the start time.
423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     */
43f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert    public void reset() {
44f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert        mStartTime = SystemClock.uptimeMillis();
453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    /**
48f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert     * Gets the number of milliseconds since the object was created, or {@link #reset} was called.
493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     */
50f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert    public int getLatency() {
51f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert        long now = SystemClock.uptimeMillis();
52f95ce100dcbc77794b79b0187c566bb58b5978d3Bjorn Bringert        return (int) (now - mStartTime);
533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert}
56