Avoid creating a new formatter if null

This can improve performance in certain cases,
  and has the advantage of controlling the "global" default formatter
  that is used for null cases.
This commit is contained in:
Daniel Cohen Gindi 2016-08-09 16:02:07 +03:00
parent 18eec8f0e6
commit 2176873271
3 changed files with 22 additions and 6 deletions

View file

@ -98,7 +98,7 @@ public abstract class Chart<T extends ChartData<? extends IDataSet<? extends Ent
/**
* default value-formatter, number of digits depends on provided chart-data
*/
protected DefaultValueFormatter mDefaultFormatter = new DefaultValueFormatter(0);
protected DefaultValueFormatter mDefaultValueFormatter = new DefaultValueFormatter(0);
/**
* paint object used for drawing the description text in the bottom right
@ -305,8 +305,8 @@ public abstract class Chart<T extends ChartData<? extends IDataSet<? extends Ent
setupDefaultFormatter(data.getYMin(), data.getYMax());
for (IDataSet set : mData.getDataSets()) {
if (set.needsFormatter() || set.getValueFormatter() == mDefaultFormatter)
set.setValueFormatter(mDefaultFormatter);
if (set.needsFormatter() || set.getValueFormatter() == mDefaultValueFormatter)
set.setValueFormatter(mDefaultValueFormatter);
}
// let the chart know there is new data
@ -393,7 +393,7 @@ public abstract class Chart<T extends ChartData<? extends IDataSet<? extends Ent
int digits = Utils.getDecimals(reference);
// setup the formatter with a new number of digits
mDefaultFormatter.setup(digits);
mDefaultValueFormatter.setup(digits);
}
/**
@ -981,7 +981,7 @@ public abstract class Chart<T extends ChartData<? extends IDataSet<? extends Ent
* @return
*/
public IValueFormatter getDefaultValueFormatter() {
return mDefaultFormatter;
return mDefaultValueFormatter;
}
/**

View file

@ -268,7 +268,7 @@ public abstract class BaseDataSet<T extends Entry> implements IDataSet<T> {
@Override
public IValueFormatter getValueFormatter() {
if (needsFormatter())
return new DefaultValueFormatter(1);
return Utils.getDefaultValueFormatter();
return mValueFormatter;
}

View file

@ -18,6 +18,9 @@ import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import com.github.mikephil.charting.formatter.DefaultValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import java.util.List;
/**
@ -233,6 +236,19 @@ public abstract class Utils {
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
};
private static IValueFormatter mDefaultValueFormatter = generateDefaultValueFormatter();
private static IValueFormatter generateDefaultValueFormatter() {
final DefaultValueFormatter formatter = new DefaultValueFormatter(1);
return formatter;
}
/// - returns: The default value formatter used for all chart components that needs a default
public static IValueFormatter getDefaultValueFormatter()
{
return mDefaultValueFormatter;
}
/**
* Formats the given number to the given number of decimals, and returns the
* number as a string, maximum 35 characters. If thousands are separated, the separating