RFR: 8292758: put support for UNSIGNED5 format into its own header file [v3]

Coleen Phillimore coleenp at openjdk.org
Mon Sep 5 18:25:24 UTC 2022


On Sat, 3 Sep 2022 23:46:41 GMT, John R Rose <jrose at openjdk.org> wrote:

>> Refactor code from inside of CompressedStream into its own unit.
>> 
>> This code is likely to be used in future refactorings, such as JDK-8292818 (replace 96-bit representation for field metadata with variable-sized streams).
>> 
>> Add gtests.
>
> John R Rose has updated the pull request incrementally with one additional commit since the last revision:
> 
>   add more support for SA including vmStructs; tweak some debug code

Thank you for adding the SA and debug.cpp for debugging this.

src/hotspot/share/code/compressedStream.cpp line 85:

> 83:   const int min_expansion = UNSIGNED5::MAX_LENGTH;
> 84:   if (nsize < min_expansion*2)
> 85:     nsize = min_expansion*2;

I think our coding style guide recommends having {} around even one line code inside if and else statements. I usually ignore this if it's on the same line, but on a separate line, it seems worth pointing out.

src/hotspot/share/utilities/unsigned5.cpp line 35:

> 33: template u4 UNSIGNED5::read_uint(u_char* array, int& offset_rw, int limit, AGS);
> 34: template void UNSIGNED5::write_uint(uint32_t value, u_char* array, int& offset_rw, int limit, AGS);
> 35: template int UNSIGNED5::check_length(u_char* array, int offset, int limit, AGS);

I don't know why you'd need these explicit instantiations.  The entire templates are in the hpp files so the caller will instantiate them.

src/hotspot/share/utilities/unsigned5.hpp line 174:

> 172: 
> 173:   // returns the encoded byte length of an unsigned 32-bit int
> 174:   static constexpr int encoded_length(uint32_t value) {

Should all of these functions be private?

src/hotspot/share/utilities/unsigned5.hpp line 312:

> 310:       : _array(const_cast<ARR&>(array)), _limit_ptr(NULL)
> 311:         // note:  if _limit_ptr is NULL, the ARR& is never reassigned
> 312:     { limit_init(); _position = 0; }

indent needed.

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/Unsigned5.java line 59:

> 57:       hval = db.lookupIntConstant("UNSIGNED5::H").intValue();
> 58:       lval = db.lookupIntConstant("UNSIGNED5::L").intValue();
> 59:       xval = db.lookupIntConstant("UNSIGNED5::X").intValue();

These constants aren't likely to change ever, are they?  I don't see why we'd need the SA to get these constants from the VM.  It could just hard-code them like you have here.  Then UNSIGNED5 doesn't have to make VMStructs a friend class.
Also, there isn't a compatibility issue with older SA - it might work sometimes but the SA version should match the JVM that is being debugged.

test/hotspot/gtest/utilities/test_unsigned5.cpp line 31:

> 29: // T.I.L.
> 30: // $ sh ./configure ... --with-gtest=<...>/googletest ...
> 31: // $ make exploded-test TEST=gtest:unsigned5

What does T.I.L mean?  This isn't the only way to run this test, so don't include this.

-------------

PR: https://git.openjdk.org/jdk/pull/10067


More information about the serviceability-dev mailing list