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 profile will only write messages to a writer if the 21d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * time exceeds a given threshold. For mark() calls, it uses the 22d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * time since last event, and for stop() calls it uses the total 23d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde * elapsed duration of the profile. 24d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde */ 25d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohdepublic class GuardingProfile extends ProfileBase { 26d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final Writer mGuardWriter; 27d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final Writer mVerboseWriter; 28d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde private final int mMaxMillis; 29d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 30d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde public GuardingProfile(Writer writer, Writer verbose, String name,int maxDuration) { 31d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde super(name); 32d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mGuardWriter = writer; 33d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mVerboseWriter = verbose; 34d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mMaxMillis = maxDuration; 35d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 36d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 37d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde @Override 38d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde protected void onStart() { 39d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mVerboseWriter.write(format(0, "GUARD", "START")); 40d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 41d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 42d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde @Override 43d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde protected void onMark(double totalMillis, double lastMillis, String reason) { 44d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde if (lastMillis > mMaxMillis) { 45d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mGuardWriter.write(format(totalMillis, "GUARD", lastMillis, reason)); 46d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } else { 47d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mVerboseWriter.write(format(totalMillis, "GUARD", lastMillis, reason)); 48d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 49d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 50d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 51d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde @Override 52d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde protected void onStop(double totalMillis, double lastMillis) { 53d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde if (totalMillis > mMaxMillis) { 54d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mGuardWriter.write(format(totalMillis, "GUARD", "STOP")); 55d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } else { 56d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde mVerboseWriter.write(format(totalMillis, "GUARD", "STOP")); 57d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 58d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 59d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde 60d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde @Override 61d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde protected void onStop(double totalMillis, double lastMillis, String reason) { 62d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde onMark(totalMillis, lastMillis, reason); 63d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde onStop(totalMillis, lastMillis); 64d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde } 65d34df829eba68c977ef4c77e3f6830fbbc8d01bfPaul Rohde} 66