2016-03-02 11:50:19 +01:00
|
|
|
// Copyright 2016 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package go;
|
|
|
|
|
|
|
|
import android.test.InstrumentationTestCase;
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
|
2017-01-01 22:43:46 +01:00
|
|
|
import benchmark.*;
|
2016-03-02 11:50:19 +01:00
|
|
|
|
|
|
|
public class SeqBench extends InstrumentationTestCase {
|
|
|
|
|
2016-08-20 21:10:46 +02:00
|
|
|
public static class AnI implements I {
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void f() {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-01-01 22:43:46 +01:00
|
|
|
private static class Benchmarks implements benchmark.Benchmarks {
|
2016-03-02 11:50:19 +01:00
|
|
|
private static Map<String, Runnable> benchmarks;
|
|
|
|
private static ExecutorService executor = Executors.newSingleThreadExecutor();
|
|
|
|
|
|
|
|
static {
|
|
|
|
benchmarks = new HashMap<String, Runnable>();
|
|
|
|
benchmarks.put("Empty", new Runnable() {
|
|
|
|
@Override public void run() {
|
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("Noargs", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.noargs();
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("Onearg", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.onearg(0);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("Manyargs", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.manyargs(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("Oneret", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.oneret();
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
2016-08-20 21:10:46 +02:00
|
|
|
final I javaRef = new AnI();
|
2016-03-06 14:16:38 +01:00
|
|
|
benchmarks.put("Refforeign", new Runnable() {
|
2016-03-02 11:50:19 +01:00
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.ref(javaRef);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
2016-09-04 23:37:26 +03:00
|
|
|
final I goRef = Benchmark.newI();
|
2016-03-02 11:50:19 +01:00
|
|
|
benchmarks.put("Refgo", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.ref(goRef);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("StringShort", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.string(Benchmark.ShortString);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("StringLong", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.string(Benchmark.LongString);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("StringShortUnicode", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.string(Benchmark.ShortStringUnicode);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("StringLongUnicode", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.string(Benchmark.LongStringUnicode);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
mobile/bind: avoid intermediate []rune copy converting Java string to Go
Converting a Go string to a string suitable use a specialized function,
UTF16Encode, that can encode the string directly to a malloc'ed buffer. That
way, only two copies are made when strings are passed from Go to Java; once
for UTF-8 to UTF-16 encoding and once for the creation of the Java String.
This CL implements the same optimization in the other direction, with a
UTF-16 to UTF-8 decoder implemented in C. Unfortunately, while calling into a
Go decoder also saves the extra copy, the Cgo overhead makes the calls much
slower for short strings.
To alleviate the risk of introducing decoding bugs, I've added the tests from
the encoding/utf16 package to SeqTest.
As a sideeffect, both Java and ObjC now always copy strings, regardless of
the argument mode. The cpy argument can therefore be removed from the string
conversion functions. Furthermore, the modeRetained and modeReturned modes
can be collapsed into just one.
While we're here, delete a leftover function from seq/strings.go that
wasn't removed when the old seq buffers went away.
Benchmarks, as compared with benchstat over 5 runs:
name old time/op new time/op delta
JavaStringShort 11.4µs ±13% 11.6µs ± 4% ~ (p=0.859 n=10+5)
JavaStringShortDirect 19.5µs ± 9% 20.3µs ± 2% +3.68% (p=0.019 n=9+5)
JavaStringLong 103µs ± 8% 24µs ± 4% -77.13% (p=0.001 n=9+5)
JavaStringLongDirect 113µs ± 9% 32µs ± 7% -71.63% (p=0.001 n=9+5)
JavaStringShortUnicode 11.1µs ±16% 10.7µs ± 5% ~ (p=0.190 n=9+5)
JavaStringShortUnicodeDirect 19.6µs ± 7% 20.2µs ± 1% +2.78% (p=0.029 n=9+5)
JavaStringLongUnicode 97.1µs ± 9% 28.0µs ± 5% -71.17% (p=0.001 n=9+5)
JavaStringLongUnicodeDirect 105µs ±10% 34µs ± 5% -67.23% (p=0.002 n=8+5)
JavaStringRetShort 14.2µs ± 2% 13.9µs ± 1% -2.15% (p=0.006 n=8+5)
JavaStringRetShortDirect 20.8µs ± 2% 20.4µs ± 2% ~ (p=0.065 n=8+5)
JavaStringRetLong 42.2µs ± 9% 42.4µs ± 3% ~ (p=0.190 n=9+5)
JavaStringRetLongDirect 51.2µs ±21% 50.8µs ± 8% ~ (p=0.518 n=9+5)
GoStringShort 23.4µs ± 7% 22.5µs ± 3% -3.55% (p=0.019 n=9+5)
GoStringLong 51.9µs ± 9% 53.1µs ± 3% ~ (p=0.240 n=9+5)
GoStringShortUnicode 24.2µs ± 6% 22.8µs ± 1% -5.54% (p=0.002 n=9+5)
GoStringLongUnicode 58.6µs ± 8% 57.6µs ± 3% ~ (p=0.518 n=9+5)
GoStringRetShort 27.6µs ± 1% 23.2µs ± 2% -15.87% (p=0.003 n=7+5)
GoStringRetLong 129µs ±12% 33µs ± 2% -74.03% (p=0.001 n=10+5)
Change-Id: Icb9481981493ffca8defed9fb80a9433d6048937
Reviewed-on: https://go-review.googlesource.com/20250
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-04 17:59:04 +01:00
|
|
|
benchmarks.put("StringRetShort", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.stringRetShort();
|
mobile/bind: avoid intermediate []rune copy converting Java string to Go
Converting a Go string to a string suitable use a specialized function,
UTF16Encode, that can encode the string directly to a malloc'ed buffer. That
way, only two copies are made when strings are passed from Go to Java; once
for UTF-8 to UTF-16 encoding and once for the creation of the Java String.
This CL implements the same optimization in the other direction, with a
UTF-16 to UTF-8 decoder implemented in C. Unfortunately, while calling into a
Go decoder also saves the extra copy, the Cgo overhead makes the calls much
slower for short strings.
To alleviate the risk of introducing decoding bugs, I've added the tests from
the encoding/utf16 package to SeqTest.
As a sideeffect, both Java and ObjC now always copy strings, regardless of
the argument mode. The cpy argument can therefore be removed from the string
conversion functions. Furthermore, the modeRetained and modeReturned modes
can be collapsed into just one.
While we're here, delete a leftover function from seq/strings.go that
wasn't removed when the old seq buffers went away.
Benchmarks, as compared with benchstat over 5 runs:
name old time/op new time/op delta
JavaStringShort 11.4µs ±13% 11.6µs ± 4% ~ (p=0.859 n=10+5)
JavaStringShortDirect 19.5µs ± 9% 20.3µs ± 2% +3.68% (p=0.019 n=9+5)
JavaStringLong 103µs ± 8% 24µs ± 4% -77.13% (p=0.001 n=9+5)
JavaStringLongDirect 113µs ± 9% 32µs ± 7% -71.63% (p=0.001 n=9+5)
JavaStringShortUnicode 11.1µs ±16% 10.7µs ± 5% ~ (p=0.190 n=9+5)
JavaStringShortUnicodeDirect 19.6µs ± 7% 20.2µs ± 1% +2.78% (p=0.029 n=9+5)
JavaStringLongUnicode 97.1µs ± 9% 28.0µs ± 5% -71.17% (p=0.001 n=9+5)
JavaStringLongUnicodeDirect 105µs ±10% 34µs ± 5% -67.23% (p=0.002 n=8+5)
JavaStringRetShort 14.2µs ± 2% 13.9µs ± 1% -2.15% (p=0.006 n=8+5)
JavaStringRetShortDirect 20.8µs ± 2% 20.4µs ± 2% ~ (p=0.065 n=8+5)
JavaStringRetLong 42.2µs ± 9% 42.4µs ± 3% ~ (p=0.190 n=9+5)
JavaStringRetLongDirect 51.2µs ±21% 50.8µs ± 8% ~ (p=0.518 n=9+5)
GoStringShort 23.4µs ± 7% 22.5µs ± 3% -3.55% (p=0.019 n=9+5)
GoStringLong 51.9µs ± 9% 53.1µs ± 3% ~ (p=0.240 n=9+5)
GoStringShortUnicode 24.2µs ± 6% 22.8µs ± 1% -5.54% (p=0.002 n=9+5)
GoStringLongUnicode 58.6µs ± 8% 57.6µs ± 3% ~ (p=0.518 n=9+5)
GoStringRetShort 27.6µs ± 1% 23.2µs ± 2% -15.87% (p=0.003 n=7+5)
GoStringRetLong 129µs ±12% 33µs ± 2% -74.03% (p=0.001 n=10+5)
Change-Id: Icb9481981493ffca8defed9fb80a9433d6048937
Reviewed-on: https://go-review.googlesource.com/20250
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-04 17:59:04 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
benchmarks.put("StringRetLong", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.stringRetLong();
|
mobile/bind: avoid intermediate []rune copy converting Java string to Go
Converting a Go string to a string suitable use a specialized function,
UTF16Encode, that can encode the string directly to a malloc'ed buffer. That
way, only two copies are made when strings are passed from Go to Java; once
for UTF-8 to UTF-16 encoding and once for the creation of the Java String.
This CL implements the same optimization in the other direction, with a
UTF-16 to UTF-8 decoder implemented in C. Unfortunately, while calling into a
Go decoder also saves the extra copy, the Cgo overhead makes the calls much
slower for short strings.
To alleviate the risk of introducing decoding bugs, I've added the tests from
the encoding/utf16 package to SeqTest.
As a sideeffect, both Java and ObjC now always copy strings, regardless of
the argument mode. The cpy argument can therefore be removed from the string
conversion functions. Furthermore, the modeRetained and modeReturned modes
can be collapsed into just one.
While we're here, delete a leftover function from seq/strings.go that
wasn't removed when the old seq buffers went away.
Benchmarks, as compared with benchstat over 5 runs:
name old time/op new time/op delta
JavaStringShort 11.4µs ±13% 11.6µs ± 4% ~ (p=0.859 n=10+5)
JavaStringShortDirect 19.5µs ± 9% 20.3µs ± 2% +3.68% (p=0.019 n=9+5)
JavaStringLong 103µs ± 8% 24µs ± 4% -77.13% (p=0.001 n=9+5)
JavaStringLongDirect 113µs ± 9% 32µs ± 7% -71.63% (p=0.001 n=9+5)
JavaStringShortUnicode 11.1µs ±16% 10.7µs ± 5% ~ (p=0.190 n=9+5)
JavaStringShortUnicodeDirect 19.6µs ± 7% 20.2µs ± 1% +2.78% (p=0.029 n=9+5)
JavaStringLongUnicode 97.1µs ± 9% 28.0µs ± 5% -71.17% (p=0.001 n=9+5)
JavaStringLongUnicodeDirect 105µs ±10% 34µs ± 5% -67.23% (p=0.002 n=8+5)
JavaStringRetShort 14.2µs ± 2% 13.9µs ± 1% -2.15% (p=0.006 n=8+5)
JavaStringRetShortDirect 20.8µs ± 2% 20.4µs ± 2% ~ (p=0.065 n=8+5)
JavaStringRetLong 42.2µs ± 9% 42.4µs ± 3% ~ (p=0.190 n=9+5)
JavaStringRetLongDirect 51.2µs ±21% 50.8µs ± 8% ~ (p=0.518 n=9+5)
GoStringShort 23.4µs ± 7% 22.5µs ± 3% -3.55% (p=0.019 n=9+5)
GoStringLong 51.9µs ± 9% 53.1µs ± 3% ~ (p=0.240 n=9+5)
GoStringShortUnicode 24.2µs ± 6% 22.8µs ± 1% -5.54% (p=0.002 n=9+5)
GoStringLongUnicode 58.6µs ± 8% 57.6µs ± 3% ~ (p=0.518 n=9+5)
GoStringRetShort 27.6µs ± 1% 23.2µs ± 2% -15.87% (p=0.003 n=7+5)
GoStringRetLong 129µs ±12% 33µs ± 2% -74.03% (p=0.001 n=10+5)
Change-Id: Icb9481981493ffca8defed9fb80a9433d6048937
Reviewed-on: https://go-review.googlesource.com/20250
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-04 17:59:04 +01:00
|
|
|
}
|
|
|
|
});
|
2016-03-03 13:34:38 +01:00
|
|
|
final byte[] shortSlice = Benchmark.getShortSlice();
|
2016-03-02 11:50:19 +01:00
|
|
|
benchmarks.put("SliceShort", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.slice(shortSlice);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
2016-03-03 13:34:38 +01:00
|
|
|
final byte[] longSlice = Benchmark.getLongSlice();
|
2016-03-02 11:50:19 +01:00
|
|
|
benchmarks.put("SliceLong", new Runnable() {
|
|
|
|
@Override public void run() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.slice(longSlice);
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2016-09-04 23:37:26 +03:00
|
|
|
public void runDirect(String name, final long n) {
|
2016-03-02 11:50:19 +01:00
|
|
|
final Runnable r = benchmarks.get(name);
|
|
|
|
try {
|
|
|
|
executor.submit(new Runnable() {
|
|
|
|
@Override public void run() {
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
r.run();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}).get();
|
|
|
|
} catch (Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-04 23:37:26 +03:00
|
|
|
public void run(String name, long n) {
|
2016-03-02 11:50:19 +01:00
|
|
|
final Runnable r = benchmarks.get(name);
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
r.run();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public I newI() {
|
2016-03-02 11:50:19 +01:00
|
|
|
return new AnI();
|
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void ref(I i) {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void noargs() {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void onearg(long i) {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public long oneret() {
|
2016-03-02 11:50:19 +01:00
|
|
|
return 0;
|
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void manyargs(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long gp8, long p9) {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void string(String s) {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public void slice(byte[] s) {
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public String stringRetShort() {
|
mobile/bind: avoid intermediate []rune copy converting Java string to Go
Converting a Go string to a string suitable use a specialized function,
UTF16Encode, that can encode the string directly to a malloc'ed buffer. That
way, only two copies are made when strings are passed from Go to Java; once
for UTF-8 to UTF-16 encoding and once for the creation of the Java String.
This CL implements the same optimization in the other direction, with a
UTF-16 to UTF-8 decoder implemented in C. Unfortunately, while calling into a
Go decoder also saves the extra copy, the Cgo overhead makes the calls much
slower for short strings.
To alleviate the risk of introducing decoding bugs, I've added the tests from
the encoding/utf16 package to SeqTest.
As a sideeffect, both Java and ObjC now always copy strings, regardless of
the argument mode. The cpy argument can therefore be removed from the string
conversion functions. Furthermore, the modeRetained and modeReturned modes
can be collapsed into just one.
While we're here, delete a leftover function from seq/strings.go that
wasn't removed when the old seq buffers went away.
Benchmarks, as compared with benchstat over 5 runs:
name old time/op new time/op delta
JavaStringShort 11.4µs ±13% 11.6µs ± 4% ~ (p=0.859 n=10+5)
JavaStringShortDirect 19.5µs ± 9% 20.3µs ± 2% +3.68% (p=0.019 n=9+5)
JavaStringLong 103µs ± 8% 24µs ± 4% -77.13% (p=0.001 n=9+5)
JavaStringLongDirect 113µs ± 9% 32µs ± 7% -71.63% (p=0.001 n=9+5)
JavaStringShortUnicode 11.1µs ±16% 10.7µs ± 5% ~ (p=0.190 n=9+5)
JavaStringShortUnicodeDirect 19.6µs ± 7% 20.2µs ± 1% +2.78% (p=0.029 n=9+5)
JavaStringLongUnicode 97.1µs ± 9% 28.0µs ± 5% -71.17% (p=0.001 n=9+5)
JavaStringLongUnicodeDirect 105µs ±10% 34µs ± 5% -67.23% (p=0.002 n=8+5)
JavaStringRetShort 14.2µs ± 2% 13.9µs ± 1% -2.15% (p=0.006 n=8+5)
JavaStringRetShortDirect 20.8µs ± 2% 20.4µs ± 2% ~ (p=0.065 n=8+5)
JavaStringRetLong 42.2µs ± 9% 42.4µs ± 3% ~ (p=0.190 n=9+5)
JavaStringRetLongDirect 51.2µs ±21% 50.8µs ± 8% ~ (p=0.518 n=9+5)
GoStringShort 23.4µs ± 7% 22.5µs ± 3% -3.55% (p=0.019 n=9+5)
GoStringLong 51.9µs ± 9% 53.1µs ± 3% ~ (p=0.240 n=9+5)
GoStringShortUnicode 24.2µs ± 6% 22.8µs ± 1% -5.54% (p=0.002 n=9+5)
GoStringLongUnicode 58.6µs ± 8% 57.6µs ± 3% ~ (p=0.518 n=9+5)
GoStringRetShort 27.6µs ± 1% 23.2µs ± 2% -15.87% (p=0.003 n=7+5)
GoStringRetLong 129µs ±12% 33µs ± 2% -74.03% (p=0.001 n=10+5)
Change-Id: Icb9481981493ffca8defed9fb80a9433d6048937
Reviewed-on: https://go-review.googlesource.com/20250
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-04 17:59:04 +01:00
|
|
|
return Benchmark.ShortString;
|
|
|
|
}
|
2016-09-04 23:37:26 +03:00
|
|
|
@Override public String stringRetLong() {
|
mobile/bind: avoid intermediate []rune copy converting Java string to Go
Converting a Go string to a string suitable use a specialized function,
UTF16Encode, that can encode the string directly to a malloc'ed buffer. That
way, only two copies are made when strings are passed from Go to Java; once
for UTF-8 to UTF-16 encoding and once for the creation of the Java String.
This CL implements the same optimization in the other direction, with a
UTF-16 to UTF-8 decoder implemented in C. Unfortunately, while calling into a
Go decoder also saves the extra copy, the Cgo overhead makes the calls much
slower for short strings.
To alleviate the risk of introducing decoding bugs, I've added the tests from
the encoding/utf16 package to SeqTest.
As a sideeffect, both Java and ObjC now always copy strings, regardless of
the argument mode. The cpy argument can therefore be removed from the string
conversion functions. Furthermore, the modeRetained and modeReturned modes
can be collapsed into just one.
While we're here, delete a leftover function from seq/strings.go that
wasn't removed when the old seq buffers went away.
Benchmarks, as compared with benchstat over 5 runs:
name old time/op new time/op delta
JavaStringShort 11.4µs ±13% 11.6µs ± 4% ~ (p=0.859 n=10+5)
JavaStringShortDirect 19.5µs ± 9% 20.3µs ± 2% +3.68% (p=0.019 n=9+5)
JavaStringLong 103µs ± 8% 24µs ± 4% -77.13% (p=0.001 n=9+5)
JavaStringLongDirect 113µs ± 9% 32µs ± 7% -71.63% (p=0.001 n=9+5)
JavaStringShortUnicode 11.1µs ±16% 10.7µs ± 5% ~ (p=0.190 n=9+5)
JavaStringShortUnicodeDirect 19.6µs ± 7% 20.2µs ± 1% +2.78% (p=0.029 n=9+5)
JavaStringLongUnicode 97.1µs ± 9% 28.0µs ± 5% -71.17% (p=0.001 n=9+5)
JavaStringLongUnicodeDirect 105µs ±10% 34µs ± 5% -67.23% (p=0.002 n=8+5)
JavaStringRetShort 14.2µs ± 2% 13.9µs ± 1% -2.15% (p=0.006 n=8+5)
JavaStringRetShortDirect 20.8µs ± 2% 20.4µs ± 2% ~ (p=0.065 n=8+5)
JavaStringRetLong 42.2µs ± 9% 42.4µs ± 3% ~ (p=0.190 n=9+5)
JavaStringRetLongDirect 51.2µs ±21% 50.8µs ± 8% ~ (p=0.518 n=9+5)
GoStringShort 23.4µs ± 7% 22.5µs ± 3% -3.55% (p=0.019 n=9+5)
GoStringLong 51.9µs ± 9% 53.1µs ± 3% ~ (p=0.240 n=9+5)
GoStringShortUnicode 24.2µs ± 6% 22.8µs ± 1% -5.54% (p=0.002 n=9+5)
GoStringLongUnicode 58.6µs ± 8% 57.6µs ± 3% ~ (p=0.518 n=9+5)
GoStringRetShort 27.6µs ± 1% 23.2µs ± 2% -15.87% (p=0.003 n=7+5)
GoStringRetLong 129µs ±12% 33µs ± 2% -74.03% (p=0.001 n=10+5)
Change-Id: Icb9481981493ffca8defed9fb80a9433d6048937
Reviewed-on: https://go-review.googlesource.com/20250
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-04 17:59:04 +01:00
|
|
|
return Benchmark.LongString;
|
|
|
|
}
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testBenchmark() {
|
2016-09-04 23:37:26 +03:00
|
|
|
Benchmark.runBenchmarks(new Benchmarks());
|
2016-03-02 11:50:19 +01:00
|
|
|
}
|
|
|
|
}
|