blob: be1cf6010bff6ca4b399e83ad43f76216065835e [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.dialer.metrics;
import android.os.SystemClock;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
import javax.inject.Singleton;
/** Stub {@link Metrics} which simply logs debug messages to logcat. */
@ThreadSafe
@Singleton
public final class StubMetrics implements Metrics {
private final ConcurrentMap<String, StubTimerEvent> namedEvents = new ConcurrentHashMap<>();
private final ConcurrentMap<Integer, StubTimerEvent> unnamedEvents = new ConcurrentHashMap<>();
@Inject
StubMetrics() {}
@Override
public void startTimer(String timerEventName) {
namedEvents.put(timerEventName, new StubTimerEvent());
}
@Override
public Integer startUnnamedTimer() {
StubTimerEvent stubTimerEvent = new StubTimerEvent();
int id = stubTimerEvent.hashCode();
LogUtil.d("StubMetrics.startUnnamedTimer", "started timer for id: %d", id);
unnamedEvents.put(id, stubTimerEvent);
return id;
}
@Override
public void stopTimer(String timerEventName) {
StubTimerEvent stubTimerEvent = namedEvents.remove(timerEventName);
if (stubTimerEvent == null) {
return;
}
LogUtil.d(
"StubMetrics.stopTimer",
"%s took %dms",
timerEventName,
SystemClock.elapsedRealtime() - stubTimerEvent.startTime);
}
@Override
public void stopUnnamedTimer(int timerId, String timerEventName) {
long startTime =
Assert.isNotNull(
unnamedEvents.remove(timerId),
"no timer found for id: %d (%s)",
timerId,
timerEventName)
.startTime;
LogUtil.d(
"StubMetrics.stopUnnamedTimer",
"%s took %dms",
timerEventName,
SystemClock.elapsedRealtime() - startTime);
}
@Override
public void startJankRecorder(String eventName) {
LogUtil.d("StubMetrics.startJankRecorder", "started jank recorder for %s", eventName);
}
@Override
public void stopJankRecorder(String eventName) {
LogUtil.d("StubMetrics.startJankRecorder", "stopped jank recorder for %s", eventName);
}
@Override
public void recordMemory(String memoryEventName) {
LogUtil.d("StubMetrics.startJankRecorder", "recorded memory for %s", memoryEventName);
}
@Override
public void recordBattery(String batteryEventName) {
LogUtil.d("StubMetrics.recordBattery", "recorded battery for %s", batteryEventName);
}
private static class StubTimerEvent {
final long startTime;
StubTimerEvent() {
this.startTime = SystemClock.elapsedRealtime();
}
}
}