/* * Copyright (C) 2006 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.traceview; class TickScaler { private double mMinVal; // required input private double mMaxVal; // required input private double mRangeVal; private int mNumPixels; // required input private int mPixelsPerTick; // required input private double mPixelsPerRange; private double mTickIncrement; private double mMinMajorTick; TickScaler(double minVal, double maxVal, int numPixels, int pixelsPerTick) { mMinVal = minVal; mMaxVal = maxVal; mNumPixels = numPixels; mPixelsPerTick = pixelsPerTick; } public void setMinVal(double minVal) { mMinVal = minVal; } public double getMinVal() { return mMinVal; } public void setMaxVal(double maxVal) { mMaxVal = maxVal; } public double getMaxVal() { return mMaxVal; } public void setNumPixels(int numPixels) { mNumPixels = numPixels; } public int getNumPixels() { return mNumPixels; } public void setPixelsPerTick(int pixelsPerTick) { mPixelsPerTick = pixelsPerTick; } public int getPixelsPerTick() { return mPixelsPerTick; } public void setPixelsPerRange(double pixelsPerRange) { mPixelsPerRange = pixelsPerRange; } public double getPixelsPerRange() { return mPixelsPerRange; } public void setTickIncrement(double tickIncrement) { mTickIncrement = tickIncrement; } public double getTickIncrement() { return mTickIncrement; } public void setMinMajorTick(double minMajorTick) { mMinMajorTick = minMajorTick; } public double getMinMajorTick() { return mMinMajorTick; } // Convert a time value to a 0-based pixel value public int valueToPixel(double value) { return (int) Math.ceil(mPixelsPerRange * (value - mMinVal) - 0.5); } // Convert a time value to a 0-based fractional pixel public double valueToPixelFraction(double value) { return mPixelsPerRange * (value - mMinVal); } // Convert a 0-based pixel value to a time value public double pixelToValue(int pixel) { return mMinVal + (pixel / mPixelsPerRange); } public void computeTicks(boolean useGivenEndPoints) { int numTicks = mNumPixels / mPixelsPerTick; mRangeVal = mMaxVal - mMinVal; mTickIncrement = mRangeVal / numTicks; double dlogTickIncrement = Math.log10(mTickIncrement); int logTickIncrement = (int) Math.floor(dlogTickIncrement); double scale = Math.pow(10, logTickIncrement); double scaledTickIncr = mTickIncrement / scale; if (scaledTickIncr > 5.0) scaledTickIncr = 10; else if (scaledTickIncr > 2) scaledTickIncr = 5; else if (scaledTickIncr > 1) scaledTickIncr = 2; else scaledTickIncr = 1; mTickIncrement = scaledTickIncr * scale; if (!useGivenEndPoints) { // Round up the max val to the next minor tick double minorTickIncrement = mTickIncrement / 5; double dval = mMaxVal / minorTickIncrement; int ival = (int) dval; if (ival != dval) mMaxVal = (ival + 1) * minorTickIncrement; // Round down the min val to a multiple of tickIncrement ival = (int) (mMinVal / mTickIncrement); mMinVal = ival * mTickIncrement; mMinMajorTick = mMinVal; } else { int ival = (int) (mMinVal / mTickIncrement); mMinMajorTick = ival * mTickIncrement; if (mMinMajorTick < mMinVal) mMinMajorTick = mMinMajorTick + mTickIncrement; } mRangeVal = mMaxVal - mMinVal; mPixelsPerRange = (double) mNumPixels / mRangeVal; } }