diff --git a/.gitignore b/.gitignore index 9c4de58..871edad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +/app/app.iml +/PerformanceLab.iml +/.idea .gradle /local.properties /.idea/workspace.xml diff --git a/app/src/main/java/com/performance/ua/performancelab/CanvasApiView.java b/app/src/main/java/com/performance/ua/performancelab/CanvasApiView.java index df5c55d..13791bb 100644 --- a/app/src/main/java/com/performance/ua/performancelab/CanvasApiView.java +++ b/app/src/main/java/com/performance/ua/performancelab/CanvasApiView.java @@ -34,9 +34,14 @@ protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < N; i++) { // Each card is laid out a little to the right of the previous one. + canvas.save(); myPaint.setColor(Color.RED / (i + 1)); myPaint.setStrokeWidth(10); + if (i < N - 1) { + canvas.clipRect(MARGIN + i * shift, MARGIN, MARGIN + (i + 1) * shift, SIZE); + } canvas.drawRect(MARGIN + i * shift, MARGIN, SIZE + i * shift, SIZE, myPaint); + canvas.restore(); } // Invalidate the whole view. Doing this calls onDraw() if the view is visible. invalidate(); diff --git a/app/src/main/java/com/performance/ua/performancelab/ContainerActivity.java b/app/src/main/java/com/performance/ua/performancelab/ContainerActivity.java index d46c89c..848e654 100644 --- a/app/src/main/java/com/performance/ua/performancelab/ContainerActivity.java +++ b/app/src/main/java/com/performance/ua/performancelab/ContainerActivity.java @@ -11,7 +11,9 @@ import android.view.View; import android.webkit.WebView; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Random; /** @@ -45,33 +47,21 @@ public void onClick(View v) { @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public void dumpPopularRandomNumbersByRank() { Trace.beginSection("Data Structures"); - // First we need a sorted list of the numbers to iterate through. - Integer[] sortedNumbers = coolestRandomNumbers.clone(); - Arrays.sort(sortedNumbers); + ArrayList sortedNumbers = new ArrayList<>(coolestRandomNumbers); + Collections.sort(sortedNumbers); - // Great! Now because we have no rank lookup in the population-sorted array, - // take the random number in sorted order, and find its index in the array - // that's sorted by popularity. The index is the rank, so report that. Easy and efficient! - // Except that it's... you know... It's not. - for (int i = 0; i < sortedNumbers.length; i++) { - Integer currentNumber = sortedNumbers[i]; - for (int j = 0; j < coolestRandomNumbers.length; j++) { - if (currentNumber.compareTo(coolestRandomNumbers[j]) == 0) { - Log.i("Popularity Dump", currentNumber + ": #" + j); - } - } + for (Integer value : sortedNumbers) { + Log.i("Popularity Dump", value + ": #" + coolestRandomNumbers.indexOf(value)); } Trace.endSection(); } - public static Integer[] coolestRandomNumbers = new Integer[3000]; - static int temp; + public static List coolestRandomNumbers = new ArrayList<>(); static { Random randomGenerator = new Random(); for (int i = 0; i < 3000; i++) { - temp = randomGenerator.nextInt(); - coolestRandomNumbers[i] = temp; + coolestRandomNumbers.add(randomGenerator.nextInt()); } } } diff --git a/app/src/main/java/com/performance/ua/performancelab/FibActivity.java b/app/src/main/java/com/performance/ua/performancelab/FibActivity.java index 893657d..0976dd8 100644 --- a/app/src/main/java/com/performance/ua/performancelab/FibActivity.java +++ b/app/src/main/java/com/performance/ua/performancelab/FibActivity.java @@ -3,8 +3,9 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.support.v7.app.AppCompatActivity; -import android.util.Log; import android.view.View; import android.webkit.WebView; import android.widget.TextView; @@ -18,6 +19,9 @@ public class FibActivity extends AppCompatActivity { public static final int POSITION_IN_FIB_SEQUENCE = 20; private TextView textView; + private static final int CACHE_SIZE = 1000; + private int[] cache = new int[CACHE_SIZE]; + public static void start(Context context) { context.startActivity(new Intent(context, FibActivity.class)); } @@ -30,7 +34,19 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.fib_progress).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - textView.setText(String.valueOf(computeFibonacci(POSITION_IN_FIB_SEQUENCE))); + new Thread() { + @Override + public void run() { + super.run(); + final int result = computeFibonacci(POSITION_IN_FIB_SEQUENCE); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + textView.setText(String.valueOf(result)); + } + }); + } + }.start(); } }); WebView webView = (WebView) findViewById(R.id.anim_view); @@ -40,13 +56,20 @@ public void onClick(View v) { } public int computeFibonacci(int positionInFibSequence) { - Log.i(TAG, "inside fib" + positionInFibSequence); + if (positionInFibSequence < CACHE_SIZE) { + if (cache[positionInFibSequence] != 0) { + return cache[positionInFibSequence]; + } + } + int result; if (positionInFibSequence <= 2) { - return 1; + result = 1; } else { - return computeFibonacci(positionInFibSequence - 1) + result = computeFibonacci(positionInFibSequence - 1) + computeFibonacci(positionInFibSequence - 2); } + cache[positionInFibSequence] = result; + return result; } } diff --git a/app/src/main/res/layout/backgrounds_item.xml b/app/src/main/res/layout/backgrounds_item.xml index ebf443e..060ae15 100644 --- a/app/src/main/res/layout/backgrounds_item.xml +++ b/app/src/main/res/layout/backgrounds_item.xml @@ -1,14 +1,13 @@ + android:layout_margin="10dp" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" /> \ No newline at end of file diff --git a/app/src/main/res/layout/backgrounds_layout.xml b/app/src/main/res/layout/backgrounds_layout.xml index 031a411..8554d1f 100644 --- a/app/src/main/res/layout/backgrounds_layout.xml +++ b/app/src/main/res/layout/backgrounds_layout.xml @@ -1,19 +1,17 @@ + android:orientation="vertical"> + android:text="@string/backgrounds_title" /> + android:layout_width="match_parent" + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/hierarchy_layout.xml b/app/src/main/res/layout/hierarchy_layout.xml index 94440c0..92ff981 100644 --- a/app/src/main/res/layout/hierarchy_layout.xml +++ b/app/src/main/res/layout/hierarchy_layout.xml @@ -1,38 +1,28 @@ - + android:layout_marginTop="@dimen/activity_vertical_margin"> - - + + - - - - - - + android:layout_toEndOf="@id/chat_author_avatar2" + android:text="@string/line1_text" /> - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index be515a8..168f129 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:2.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 877a4b7..573c882 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip