| /* |
| * 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; |
| } |
| } |