Skip to content
This repository was archived by the owner on Nov 14, 2018. It is now read-only.

Commit f62ff8e

Browse files
RamV13romainguy
authored andcommitted
Adding extension for timed logging (#537)
* Adding extension for timed logging * Updating timed logging extension to avoid unnecessary allocations
1 parent d35d188 commit f62ff8e

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

api/current.txt

+6
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,12 @@ package androidx.core.util {
589589
method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
590590
}
591591

592+
public final class TimingLoggerKt {
593+
ctor public TimingLoggerKt();
594+
method public static void log(android.util.TimingLogger, kotlin.jvm.functions.Function1<? super android.util.TimingLogger,kotlin.Unit> work);
595+
method public static void split(android.util.TimingLogger, String splitLabel, kotlin.jvm.functions.Function0<kotlin.Unit> work);
596+
}
597+
592598
}
593599

594600
package androidx.core.view {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright (C) 2018 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package androidx.core.util
18+
19+
import android.util.TimingLogger
20+
import org.junit.Assert.assertTrue
21+
import org.junit.Test
22+
23+
class TimingLoggerTest {
24+
@Test fun timingLogger() {
25+
val called = arrayOf(false, false, false)
26+
27+
val timingLogger = TimingLogger("TAG", "methodA")
28+
timingLogger.log {
29+
split("work A") {
30+
called[0] = true
31+
}
32+
split("work B") {
33+
called[1] = true
34+
}
35+
split("work C") {
36+
called[2] = true
37+
}
38+
}
39+
40+
assertTrue(called.reduce(Boolean::and))
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (C) 2018 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package androidx.core.util
18+
19+
import android.util.TimingLogger
20+
21+
/**
22+
* Resets the timing logger instance before timing each of the given splits and subsequently
23+
* dumping the results to the log output.
24+
*/
25+
inline fun TimingLogger.log(work: TimingLogger.() -> Unit) {
26+
this.reset()
27+
work()
28+
this.dumpToLog()
29+
}
30+
31+
/**
32+
* Times the given work and subsequently adds a split to the timing logger instance.
33+
*/
34+
inline fun TimingLogger.split(splitLabel: String, work: () -> Unit) {
35+
work()
36+
this.addSplit(splitLabel)
37+
}

0 commit comments

Comments
 (0)