Hi Prahalad,

Changes in insertChar() are also fine.

I noticed a small correction in indentation for which there is no need for 
another webrev.
At line number 674 & 738. We should maintain space between operands and 
operator.
if (end - start != fChars.length+1) {       ->        if (end - start != 
fChars.length + 1) {
&
if (end - start != fChars.length-1) {        ->         if (end - start != 
fChars.length - 1) {

Thanks,
Jay

-----Original Message-----
From: Prahalad Kumar Narayanan 
Sent: Monday, January 08, 2018 12:12 PM
To: Sergey Bylokhov; Jayathirth D V; 2d-dev
Subject: RE: [OpenJDK 2D-Dev] [11] RFR: [JDK-5064835] TextMeasurer/deleteChar 
function fails when deleting more than one characters

Hello Sergey & Jay

Thank you for your time in review & inputs. 
Please find my views herewith:

. On Performance: 
      . TextMeasurer's Constructor invokes : 
initAll(AttributedCharacterIterator text) method
      . initAll(AttributedCharacterIterator ) method further instantiates
            . fChars : new char[length]
            . fBidi : new Bidi
            . fParagraph : new StyledParagraph and so on.
      . The concerned method- deleteChar (and insertChar), invoke the same 
"initAll" method when number of characters deleted or inserted is more than one.
      . So from performance perspective, there shouldn't be a major difference 
between creating a new TextMeasurer and using deleteChar to delete more than 
few characters.

      . When methods invoke initAll, the text and its attributes are 
re-initialized and we would lose the text attributes originally set on 
TextMeasurer.
      . This is the reason why the proposed fix doesn't allow re-initialization 
and throws IllegalArgumentException when attempted to delete multiple chars.

. On Modifying insertChar method's behavior
      . As Jay suggested, we should fix insertChar method's behavior to align 
with deleteChar method.
      . I was not sure whether we should make changes to insertChar as a 
separate bug /or alongside the current fix.

      . Nevertheless, I 've created a new webrev with the changes included for 
insertChar as well.
      . Impact from changes to insertChar are as follows-
            . No new regressions seen with JTreg test cases.
            . The change in insertChar introduces 4 JCK test failures making 
total count of JCK test failures to 6
            . JCK tests that failed are: 
                     api/java_awt/Font/TextMeasurer/CharTest (Test cases: 1, 2, 
5)
                     api/java_awt/Font/LineBreakTextMeasurer/CharTest (Test 
cases: 1, 2, 4)
      . All the above test cases can be easily fixed with specification updated 
for the methods.
 
Kindly review the updated changes at your convenience. 
Link: http://cr.openjdk.java.net/~pnarayanan/5064835/webrev.01/

Thank you once again
Have a good day

Prahalad N.


-----Original Message-----
From: Sergey Bylokhov
Sent: Saturday, January 06, 2018 3:04 PM
To: Jayathirth D V; Prahalad Kumar Narayanan; 2d-dev
Subject: Re: [OpenJDK 2D-Dev] [11] RFR: [JDK-5064835] TextMeasurer/deleteChar 
function fails when deleting more than one characters

Just small comment(for a discussion), about a performance of these methods. How 
much faster these methods from the case when the TextMeasure is created from 
scratch? I mean that if they are much faster and the insertChar() method works 
already, then probably we can support this in deleteChar as well?

On 01/01/2018 22:53, Jayathirth D V wrote:
> Hi Prahalad,
> 
> Please find my inputs:
> 
> Since we are making changes to deleteChar() code and specification I think we 
> should make similar changes to insertChar() to make them behave in same way. 
> I observed Jane Wang comment in JBS and tested inserting multiple character 
> using TextMeasurer.insertChar() and it doesn't through 
> ArrayIndexOutOfBoundsException or any other exception, it just initializes 
> the text parameters using the newParagraph.
> 
> We can make changes corresponding to insertChar() in the same bug or we can 
> raise separate bug, but its better if we make changes to insertChar() also in 
> the same JBS as they are similar change corresponding to identical behavior 
> in same Class.
> 
> Regarding JCK test fail, since we are targeting it to JDK 11 I think we have 
> time to update the same without any risk. But we should get input from 
> Phil/Others regarding the same.
> 
> In the test case may be we can remove the System.out.println("Test passed."), 
> since we know that if we don't get any exception/errors the jtreg test is 
> passed. I see that some test cases have this "Test Passed" output but I feel 
> it is redundant.
> 
> Thanks,
> Jay
> 
> -----Original Message-----
> From: Prahalad Kumar Narayanan
> Sent: Friday, December 29, 2017 4:30 PM
> To: 2d-dev
> Subject: [OpenJDK 2D-Dev] [11] RFR: [JDK-5064835] 
> TextMeasurer/deleteChar function fails when deleting more than one 
> characters
> 
> Hello Everyone
> 
> Good day to you.
> 
> Request your time in reviewing the fix for the bug:
> JDK-5064835    TextMeasurer/deleteChar function fails when deleting more than 
> one characters.
> 
> Root Cause:
> . The spec clearly mentions that the concerned method is to be used to delete 
> a single character.
> . However, the spec does not mention the outcome when the method is 
> used to delete multiple characters (as reported in the bug)
> 
> Solution Approaches:
> . Since the spec does not mention the outcome when multiple characters are 
> deleted, the result is left to the implementation.
> . The solution can be approached in two perspectives-
>        1. Update the spec to explicitly mention the exception that would be 
> thrown in such cases or
>        2. Re-initialize the TextMeasurer with the new text as present in the 
> argument of the method.
> 
> Solution:
> . I inspected feasibility/ risk of both the approaches and I 'm of the 
> opinion that approach 1. is better.
> . Reason is that, with the second approach-
>        . The re-initialization would reset all text attributes, and state 
> variabes that were set on TextMeasurer (and internal StyledParagraph) object.
>        . If re-initialization is required, one could create a new 
> TextMeasurer using the modified text rather than invoking deleteChar method.
> . Thus in the proposed solution- I 've added a throws clause that explicitly 
> mentions that IllegalArgumentException will be thrown when attempted to 
> delete multiple characters.
> 
> Other Info:
> . The fix was tested with existing jtreg test cases- No regressions were seen.
> . 2 JCK tests have been found to fail. They are-
>        . java_awt/Font/TextMeasurer/CharTest (TestCase5)
>        . java_awt/Font/LineBreakMeasurer/CharTest (TestCase4) . In both the 
> failures, incorrect arguments are passed to deleteChar method- newParagraph 
> (with multiple chars deleted) & beginIndex (-1) . While the test case expects 
> index out of bounds exception for -ve index, the code now throws 
> IllegalArgumentsException.
> . A minor correction to JCK test will fix the issue. I shall raise a JCK bug 
> once the fix is approved & submitted.
> 
> Kindly review the changes at your convenience & share your feedback:
> http://cr.openjdk.java.net/~pnarayanan/5064835/webrev.00/
> 
> Note: I 've not raised a CSR for this bug yet.
> Based on review, I will create the CSR for change to the specification.
> 
> Thank you for your time in review &
> Happy New Year
> 
> Prahalad N.
> 


--
Best regards, Sergey.

Reply via email to