[OpenJDK 2D-Dev] Review Request for JDK-7107905: equals() method in IndexColorModel doesnt exist and it relies on ColorModel.equals() which is not strict
Jayathirth D V
jayathirth.d.v at oracle.com
Fri Apr 29 09:35:01 UTC 2016
Hi Jim,
Thanks for the approval.
I have not changed things in test case.
Regards,
Jay
-----Original Message-----
From: Jim Graham
Sent: Friday, April 29, 2016 2:33 PM
To: Jayathirth D V; Philip Race
Cc: 2d-dev at openjdk.java.net
Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905: equals() method in IndexColorModel doesnt exist and it relies on ColorModel.equals() which is not strict
That looks fine. I assumed that the test case hadn't changed since last time and didn't read through it. Let me know if I need to look at anything in that file...
...jim
On 04/29/2016 01:21 AM, Jayathirth D V wrote:
> Hi Jim,
>
> Thanks for the review.
> I have updated the changes mentioned by you. ICM.hashCode() was generated using NetBeans and I added super.hashCode() to include things from ColorModel. Initializing "hash" to 7 is redundant so I removed it and initialized to super.hashCode().
>
> Please find updated webrev for review :
> http://cr.openjdk.java.net/~jdv/7107905/webrev.06/
>
> I will make changes in CCC after technical review is approved.
>
> Thanks,
> Jay
> -----Original Message-----
> From: Jim Graham
> Sent: Wednesday, April 27, 2016 4:24 AM
> To: Jayathirth D V; Philip Race
> Cc: 2d-dev at openjdk.java.net
> Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905: equals()
> method in IndexColorModel doesnt exist and it relies on
> ColorModel.equals() which is not strict
>
> This version of the ICM.equals() method starts with casting the unkown obj to ICM, which may throw a cast exception. That cast needs to be moved down after the call to super.equals() ("this == cm" can just be "this == obj").
>
> In the ICM hashcode function, is there a reason that the hash variable isn't just initialized to super.hashCode() rather than starting with 7 and doing a multiply-add to incorporate the super hashcode?
>
> ...jim
>
> On 4/25/16 1:26 AM, Jayathirth D V wrote:
>> Hi,
>>
>> Based on Joe's and Jim's suggestion I have made changes to include check for getClass() in baseclass and use super.equals() from subclasses to verify class equality.
>> Please find updated webrev for review :
>> http://cr.openjdk.java.net/~jdv/7107905/webrev.05/
>>
>> For JDK-8153943 I will make relevant changes in its subclasses and sent review in its thread.
>>
>> Thanks,
>> Jay
>>
>> -----Original Message-----
>> From: Jim Graham
>> Sent: Thursday, April 14, 2016 2:57 AM
>> To: Jayathirth D V; Philip Race
>> Cc: 2d-dev at openjdk.java.net
>> Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905:
>> equals() method in IndexColorModel doesnt exist and it relies on
>> ColorModel.equals() which is not strict
>>
>> Looks good. The only thing left is the CCC...
>>
>> ...jim
>>
>> On 4/13/16 1:33 AM, Jayathirth D V wrote:
>>> Hi,
>>>
>>> Thanks Phil & Jim for your suggestion.
>>> I have made changes mentioned by Jim for whether we have validate individual bits of validBits or not in different conditions.
>>> Please find updated webrev for review :
>>> http://cr.openjdk.java.net/~jdv/7107905/webrev.04/
>>>
>>> Thanks,
>>> Jay
>>>
>>> -----Original Message-----
>>> From: Phil Race
>>> Sent: Wednesday, April 13, 2016 1:49 AM
>>> To: Jim Graham
>>> Cc: Jayathirth D V; Prasanta Sadhukhan; 2d-dev at openjdk.java.net
>>> Subject: Re: Review Request for JDK-7107905: equals() method in
>>> IndexColorModel doesnt exist and it relies on ColorModel.equals()
>>> which is not strict
>>>
>>> Seems like this would work/help.
>>>
>>> -phil.
>>>
>>> On 04/12/2016 01:19 PM, Jim Graham wrote:
>>>>
>>>> On 4/12/2016 12:59 PM, Phil Race wrote:
>>>>> I am catching up on email here, and "+1" but a couple of comments
>>>>>
>>>>> - I suppose that we can't learn anything useful from
>>>>> "cm.validbits.equals(this.validbits)"
>>>>> since only the bits up to "map_size" should be tested ?
>>>> Perhaps if the constructors truncated it at the required size we
>>>> could use equals(). I'm not sure that is worthwhile, given how
>>>> rarely it is used. I think it is used by default on some platforms (Windows?
>>>> X11?) if they have an 8-bit screen with a sparse colormap, but that
>>>> should be pretty rare these days since nearly everything we use
>>>> should be 24-bits these days.
>>>>
>>>> I have a better idea, though.
>>>>
>>>> But, since the field is assigned the original supplied value from
>>>> the constructor, then the likelihood that a non-null value will be
>>>> == identical to another colormap is likely larger than normal,
>>>> perhaps we can make it faster by checking for == and then slipping
>>>> into the faster test that simply compares the rgb[] values? Something like:
>>>>
>>>> if (validBits == cm.validBits) {
>>>> compare rgb[] entries
>>>> } else if (validBits == null || cm.validBits == null) {
>>>> return false;
>>>> } else {
>>>> bigger loop that compares rgb[] and validBits() values }
>>>>
>>>> Note that if the two fields are == and non-null, then the entries
>>>> in the rgb[] array for indices that are non-valid should have zeros
>>>> in them because of the way that the colormap data is copied
>>>> internally, so the rgb[] comparisons should be valid without
>>>> checking the associated bits.
>>>>
>>>> Potentially we could also use:
>>>>
>>>> boolean fulltest;
>>>> if (validBits == cm.validBits) {
>>>> fulltest = false;
>>>> } else if (validBits == null || cm.validBits == null) {
>>>> return false;
>>>> } else if (validBits.equals(cm.validBits)) {
>>>> fulltest = false;
>>>> } else {
>>>> fulltest = true;
>>>> }
>>>>
>>>> if (fulltest) {
>>>> compare both rgb[] and validBits() values } else {
>>>> compare rgb[] entries alone
>>>> }
>>>>
>>>> In this case we are using validBits.equals() to reduce the amount
>>>> of testing in the loop, but are not basing a conclusion on whether
>>>> the result of the comparison will be true or false. equals()
>>>> implies we don't need to compare its values bit by bit, but
>>>> !equals() doesn't mean that the ICMs aren't equals()...
>>>>
>>>> ...jim
More information about the 2d-dev
mailing list