Skip to content

Commit 8b6ab31

Browse files
committed
8261418: Reduce decoder creation overheads for sun.nio.cs.ext Charsets
Reviewed-by: naoto
1 parent 5e1b809 commit 8b6ab31

File tree

15 files changed

+357
-504
lines changed

15 files changed

+357
-504
lines changed

src/jdk.charsets/share/classes/sun/nio/cs/ext/EUC_JP.java.template

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -113,14 +113,10 @@ public class EUC_JP
113113
byte[] sa = src.array();
114114
int sp = src.arrayOffset() + src.position();
115115
int sl = src.arrayOffset() + src.limit();
116-
assert (sp <= sl);
117-
sp = (sp <= sl ? sp : sl);
118116

119117
char[] da = dst.array();
120118
int dp = dst.arrayOffset() + dst.position();
121119
int dl = dst.arrayOffset() + dst.limit();
122-
assert (dp <= dl);
123-
dp = (dp <= dl ? dp : dl);
124120

125121
int b1 = 0, b2 = 0;
126122
int inputSize = 0;
@@ -296,13 +292,10 @@ public class EUC_JP
296292
char[] sa = src.array();
297293
int sp = src.arrayOffset() + src.position();
298294
int sl = src.arrayOffset() + src.limit();
299-
assert (sp <= sl);
300-
sp = (sp <= sl ? sp : sl);
295+
301296
byte[] da = dst.array();
302297
int dp = dst.arrayOffset() + dst.position();
303298
int dl = dst.arrayOffset() + dst.limit();
304-
assert (dp <= dl);
305-
dp = (dp <= dl ? dp : dl);
306299

307300
int outputSize = 0;
308301
byte[] outputByte;

src/jdk.charsets/share/classes/sun/nio/cs/ext/EUC_TW.java.template

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2009, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -146,6 +146,19 @@ public class EUC_TW extends Charset implements HistoricallyNamedCharset
146146
return b >= b1Min && b <= b1Max;
147147
}
148148

149+
public static char decodeSingleOrReplace(int b1, int b2, int p, char replace) {
150+
if (b1 < b1Min || b1 > b1Max || b2 < b2Min || b2 > b2Max)
151+
return replace;
152+
int index = (b1 - b1Min) * dbSegSize + b2 - b2Min;
153+
char c = b2c[p].charAt(index);
154+
if (c == UNMAPPABLE_DECODING)
155+
return replace;
156+
if ((b2cIsSupp[index] & (1 << p)) == 0) {
157+
return c;
158+
}
159+
return replace;
160+
}
161+
149162
static char[] decode(int b1, int b2, int p, char[] c1, char[] c2)
150163
{
151164
if (b1 < b1Min || b1 > b1Max || b2 < b2Min || b2 > b2Max)

src/jdk.charsets/share/classes/sun/nio/cs/ext/GB18030.java.template

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -12332,14 +12332,10 @@ public class GB18030
1233212332
byte[] sa = src.array();
1233312333
int sp = src.arrayOffset() + src.position();
1233412334
int sl = src.arrayOffset() + src.limit();
12335-
assert (sp <= sl);
12336-
sp = (sp <= sl ? sp : sl);
1233712335

1233812336
char[] da = dst.array();
1233912337
int dp = dst.arrayOffset() + dst.position();
1234012338
int dl = dst.arrayOffset() + dst.limit();
12341-
assert (dp <= dl);
12342-
dp = (dp <= dl ? dp : dl);
1234312339

1234412340
int inputSize = 1;
1234512341

@@ -12585,13 +12581,10 @@ public class GB18030
1258512581
char[] sa = src.array();
1258612582
int sp = src.arrayOffset() + src.position();
1258712583
int sl = src.arrayOffset() + src.limit();
12588-
assert (sp <= sl);
12589-
sp = (sp <= sl ? sp : sl);
12584+
1259012585
byte[] da = dst.array();
1259112586
int dp = dst.arrayOffset() + dst.position();
1259212587
int dl = dst.arrayOffset() + dst.limit();
12593-
assert (dp <= dl);
12594-
dp = (dp <= dl ? dp : dl);
1259512588

1259612589
int condensedKey = 0; // expands to a four byte sequence
1259712590
int hiByte = 0, loByte = 0;

src/jdk.charsets/share/classes/sun/nio/cs/ext/IBM29626C.java.template

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,10 @@ public class IBM29626C
212212
byte[] sa = src.array();
213213
int sp = src.arrayOffset() + src.position();
214214
int sl = src.arrayOffset() + src.limit();
215-
assert (sp <= sl);
216-
sp = (sp <= sl ? sp : sl);
217215

218216
char[] da = dst.array();
219217
int dp = dst.arrayOffset() + dst.position();
220218
int dl = dst.arrayOffset() + dst.limit();
221-
assert (dp <= dl);
222-
dp = (dp <= dl ? dp : dl);
223219

224220
int b1 = 0, b2 = 0;
225221
int inputSize = 0;
@@ -484,13 +480,10 @@ public class IBM29626C
484480
char[] sa = src.array();
485481
int sp = src.arrayOffset() + src.position();
486482
int sl = src.arrayOffset() + src.limit();
487-
assert (sp <= sl);
488-
sp = (sp <= sl ? sp : sl);
483+
489484
byte[] da = dst.array();
490485
int dp = dst.arrayOffset() + dst.position();
491486
int dl = dst.arrayOffset() + dst.limit();
492-
assert (dp <= dl);
493-
dp = (dp <= dl ? dp : dl);
494487

495488
int outputSize = 0;
496489
byte[] outputByte;

src/jdk.charsets/share/classes/sun/nio/cs/ext/IBM33722.java

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
21
/*
3-
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
43
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
54
*
65
* This code is free software; you can redistribute it and/or modify it
@@ -65,15 +64,8 @@ public CharsetEncoder newEncoder() {
6564

6665
protected static class Decoder extends CharsetDecoder {
6766

68-
private final int G0 = 0;
69-
private final int G1 = 1;
70-
private final int G2 = 2;
71-
private final int G3 = 3;
72-
private final int G4 = 4;
73-
private final int SS2 = 0x8E;
74-
private final int SS3 = 0x8F;
75-
76-
private int firstByte, state;
67+
private static final int SS2 = 0x8E;
68+
private static final int SS3 = 0x8F;
7769

7870
public Decoder(Charset cs) {
7971
super(cs, 1.0f, 1.0f);
@@ -83,19 +75,16 @@ private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
8375
byte[] sa = src.array();
8476
int sp = src.arrayOffset() + src.position();
8577
int sl = src.arrayOffset() + src.limit();
86-
assert (sp <= sl);
87-
sp = (sp <= sl ? sp : sl);
78+
8879
char[] da = dst.array();
8980
int dp = dst.arrayOffset() + dst.position();
9081
int dl = dst.arrayOffset() + dst.limit();
91-
assert (dp <= dl);
92-
dp = (dp <= dl ? dp : dl);
9382

9483
try {
9584
while (sp < sl) {
9685
int byte1, byte2;
9786
int inputSize = 1;
98-
char outputChar = '\uFFFD';
87+
char outputChar;
9988
byte1 = sa[sp] & 0xff;
10089

10190
if (byte1 == SS2) {
@@ -157,7 +146,7 @@ private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
157146
while (src.hasRemaining()) {
158147
int byte1, byte2;
159148
int inputSize = 1;
160-
char outputChar = '\uFFFD';
149+
char outputChar;
161150
byte1 = src.get() & 0xff;
162151

163152
if (byte1 == SS2) {
@@ -212,16 +201,16 @@ private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
212201
}
213202

214203
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
215-
if (true && src.hasArray() && dst.hasArray())
204+
if (src.hasArray() && dst.hasArray())
216205
return decodeArrayLoop(src, dst);
217206
else
218207
return decodeBufferLoop(src, dst);
219208
}
220209

221-
private final static String byteToCharTable;
222-
private final static String mappingTableG1;
223-
private final static String mappingTableG2;
224-
private final static String mappingTableG3;
210+
private static final String byteToCharTable;
211+
private static final String mappingTableG1;
212+
private static final String mappingTableG2;
213+
private static final String mappingTableG3;
225214
static {
226215
byteToCharTable =
227216
"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
@@ -2749,9 +2738,9 @@ public Encoder(Charset cs) {
27492738
21792, 192, 73, 21824, 41, 2344, 2344, 0,
27502739
};
27512740

2752-
private final static String index2;
2753-
private final static String index2a;
2754-
private final static String index2b;
2741+
private static final String index2;
2742+
private static final String index2a;
2743+
private static final String index2b;
27552744
static {
27562745
index2 =
27572746
"\u0000\uA1F1\u0000\uA1F2\u0000\uA2CC\u0000\uA1B1\u0000\uA2C3" + // 0 - 4

src/jdk.charsets/share/classes/sun/nio/cs/ext/IBM964.java.template

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
21
/*
3-
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
43
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
54
*
65
* This code is free software; you can redistribute it and/or modify it
@@ -76,13 +75,10 @@ public class IBM964
7675
byte[] sa = src.array();
7776
int sp = src.arrayOffset() + src.position();
7877
int sl = src.arrayOffset() + src.limit();
79-
assert (sp <= sl);
80-
sp = (sp <= sl ? sp : sl);
78+
8179
char[] da = dst.array();
8280
int dp = dst.arrayOffset() + dst.position();
8381
int dl = dst.arrayOffset() + dst.limit();
84-
assert (dp <= dl);
85-
dp = (dp <= dl ? dp : dl);
8682

8783
try {
8884
while (sp < sl) {

src/jdk.charsets/share/classes/sun/nio/cs/ext/ISCII91.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -500,14 +500,10 @@ private CoderResult decodeArrayLoop(ByteBuffer src,
500500
byte[] sa = src.array();
501501
int sp = src.arrayOffset() + src.position();
502502
int sl = src.arrayOffset() + src.limit();
503-
assert (sp <= sl);
504-
sp = (sp <= sl ? sp : sl);
505503

506504
char[] da = dst.array();
507505
int dp = dst.arrayOffset() + dst.position();
508506
int dl = dst.arrayOffset() + dst.limit();
509-
assert (dp <= dl);
510-
dp = (dp <= dl ? dp : dl);
511507

512508
try {
513509
while (sp < sl) {
@@ -821,15 +817,10 @@ private CoderResult encodeArrayLoop(CharBuffer src,
821817
char[] sa = src.array();
822818
int sp = src.arrayOffset() + src.position();
823819
int sl = src.arrayOffset() + src.limit();
824-
assert (sp <= sl);
825-
sp = (sp <= sl ? sp : sl);
820+
826821
byte[] da = dst.array();
827822
int dp = dst.arrayOffset() + dst.position();
828823
int dl = dst.arrayOffset() + dst.limit();
829-
assert (dp <= dl);
830-
dp = (dp <= dl ? dp : dl);
831-
832-
int outputSize = 0;
833824

834825
try {
835826
char inputChar;

0 commit comments

Comments
 (0)