1d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde/* 2d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * Copyright (C) 2015 The Android Open Source Project 3d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * 4d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * Licensed under the Apache License, Version 2.0 (the "License"); 5d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * you may not use this file except in compliance with the License. 6d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * You may obtain a copy of the License at 7d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * 8d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * http://www.apache.org/licenses/LICENSE-2.0 9d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * 10d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * Unless required by applicable law or agreed to in writing, software 11d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * distributed under the License is distributed on an "AS IS" BASIS, 12d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * See the License for the specific language governing permissions and 14d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * limitations under the License. 15d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde */ 16d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 17d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohdepackage com.android.camera.stats.profiler; 18d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 19d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde/** 20d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * A guarding profiler creates new guarded profiles that 21d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * will only write output messages if the profile time 22d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * exceeds the threshold. 23d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde */ 24d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohdepublic class GuardingProfiler implements Profiler { 25d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private static final int DEFAULT_GUARD_DURATION_MILLIS = 15; 26d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final Writer mGuardWriter; 27d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final Writer mVerboseWriter; 28d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final int mMaxDurationMillis; 29d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 30d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde /** Create a new GuardingProfiler */ 31d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde public GuardingProfiler(Writer writer, Writer verbose) { 32d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde this(writer, verbose, DEFAULT_GUARD_DURATION_MILLIS); 33d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 34d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 35d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde /** Create a new GuardingProfiler with a given max duration. */ 36d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde public GuardingProfiler(Writer writer, Writer verbose, int maxDurationMillis) { 37d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mGuardWriter = writer; 38d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mVerboseWriter = verbose; 39d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mMaxDurationMillis = maxDurationMillis; 40d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 41d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 42d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde @Override 43d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde public Profile create(String name) { 44d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde return new GuardingProfile(mGuardWriter, mVerboseWriter, name, 45d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mMaxDurationMillis); 46d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 47d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 48d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde /** Start a new profile, but override the maxDuration */ 49d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde public Profile create(String name, int maxDurationMillis) { 50d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde return new GuardingProfile(mGuardWriter, mVerboseWriter, name, 51d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde maxDurationMillis); 52d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 53d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde} 54