16454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown/* 26454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * Copyright (C) 2012 The Android Open Source Project 36454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * 46454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 56454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * you may not use this file except in compliance with the License. 66454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * You may obtain a copy of the License at 76454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * 86454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 96454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * 106454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * Unless required by applicable law or agreed to in writing, software 116454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 126454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * See the License for the specific language governing permissions and 146454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown * limitations under the License. 156454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown */ 166454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 176454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown#define LOG_TAG "Log" 186454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 196454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown#include <utils/Log.h> 206454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown#include <utils/Timers.h> 216454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 226454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brownnamespace android { 236454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 246454f461665a44b1e47d277d8b92415b5bbce2d8Jeff BrownLogIfSlow::LogIfSlow(const char* tag, android_LogPriority priority, 256454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown int timeoutMillis, const char* message) : 266454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown mTag(tag), mPriority(priority), mTimeoutMillis(timeoutMillis), mMessage(message), 276454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown mStart(systemTime(SYSTEM_TIME_BOOTTIME)) { 286454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown} 296454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 306454f461665a44b1e47d277d8b92415b5bbce2d8Jeff BrownLogIfSlow::~LogIfSlow() { 316454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown int durationMillis = nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_BOOTTIME) - mStart); 326454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown if (durationMillis > mTimeoutMillis) { 336454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown LOG_PRI(mPriority, mTag, "%s: %dms", mMessage, durationMillis); 346454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown } 356454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown} 366454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown 376454f461665a44b1e47d277d8b92415b5bbce2d8Jeff Brown} // namespace android 38