On Thu, 5 Dec 2019 12:06:18 GMT, John Neffenger 
<github.com+1413266+jgn...@openjdk.org> wrote:

> This pull request adds support for e-paper displays with the i.MX 6 Series of 
> Applications Processors and implements [Issue 
> #521](https://github.com/javafxports/openjdk-jfx/issues/521) in the obsolete 
> *javafxports/openjdk-jfx* repository. Some of the changes were made to 
> support the new device models, while others are minor changes to the existing 
> support in JavaFX 13.
> 
> The following changes were made to support the new device models.
> 
> * Work around problems on the Kobo Glo HD Model N437.
> 
>     Ignore the error ENOTTY (25), "Inappropriate ioctl for device," when 
> setting the waveform modes. The IOCTL call is ignored by the driver on the 
> Kobo Glo HD where the error occurs, anyway.
> 
>     Use the visible y-resolution (`yres`), not the virtual y-resolution 
> (`yres_virtual`), when calculating the capacity of the off-screen byte buffer 
> and the length of the frame buffer mapping. The virtual y-resolution reported 
> by the frame buffer device driver can be an incorrect value.
> 
> * Work around problems on the Kobo Clara HD Model N249.
> 
>     The Kobo Clara HD requires the native screen width to be set to the 
> visible x-resolution (`xres`), instead than the normal virtual x-resolution 
> (`xres_virtual`), when using an unrotated and uninverted 8-bit grayscale 
> frame buffer. The work-around is provided through a new Boolean system 
> property called *monocle.epd.fixWidthY8UR*.
> 
> The following changes were made to the existing code that supports e-paper 
> displays in JavaFX 13.
> 
> * Use the correct constant for the number of bytes per pixel.
> 
>     Use the number of bytes per pixel (`Integer.BYTES`), not the number of 
> bits per pixel (`Integer.SIZE`), when calculating the capacity of the 32-bit 
> off-screen byte buffer.
> 
> * Do not round the luma value to the nearest integer.
> 
>     Use the value of luma rounded toward zero automatically by Java when 
> converting a `float` to an `int` instead of rounding to the nearest integer. 
> The additional rounding operation can decrease performance anywhere from zero 
> to 10 percent and doesn't seem worth it for a display with just 16 levels of 
> gray.
> 
> * Change camel case of system property *y8inverted*.
> 
>     Change the camel case of the system property *monocle.epd.y8inverted* to 
> the form *monocle.epd.Y8Inverted* so that it is consistent with the other 
> system properties containing Y1, Y4, and Y8 in their names.
> 
> * Improve error handling when mapping the frame buffer.
> 
>     Log the mapping and unmapping of the frame buffer. Log any errors that 
> occur on either of the system calls. Handle a `null` return value from 
> `EPDFrameBuffer.getMappedBuffer`.
> 
> * Replace non-ASCII characters with their ASCII equivalent.
> 
>     Replace non-ASCII characters in comments and log messages as follows:
> 
>     * "×" with "x" for display resolution and color depth,
>     * "×" with "*" for multiplication,
>     * "→" with "to" for transition, and
>     * "°C" with "degrees Celsius" for temperature.
> 
> * Add descriptions to Monocle EPD system properties.
> 
>     Add Javadoc comments to each constant that defines a Monocle EPD system 
> property.
> 
> * Rename `IntStructure.getInteger` to `IntStructure.get`.
> 
>     Rename the methods `getInteger` and `setInteger` in `IntStructure` to 
> avoid confusion with the Java method `Integer.getInteger`, which gets the 
> integer value of a system property.
> 
> Below are some of the more interesting test results.
> 
> * The Kobo Glo HD and Kobo Clara HD implement a true GC4 waveform mode that 
> displays only pixels with the four gray values `0x00`, `0x55`, `0xAA`, and 
> `0xFF`. On the older Kobo Touch models, the GC4 waveform mode is the same as 
> GC16.
> 
> * When the *forceMonochrome* update flag is enabled, the Kobo Clara HD uses a 
> zero-percent threshold that displays black for pixels with the value `0x00` 
> and white for all other values. The other models use a 50-percent threshold 
> that displays black for values `0x7F` or less and white for values `0x80` or 
> greater.
> 
> * The OpenJDK 11 package in Ubuntu 18.04 LTS runs twice as fast as the 
> AdoptOpenJDK build of OpenJDK 13 for some of the tests. The speed difference 
> is greatest for the tests that require pixel conversion into an 8-bit or 
> 16-bit frame buffer. I plan to investigate the cause of the performance 
> difference.
> 
> * In general, the faster processor and memory bus of the newer models does 
> not fully compensate for the threefold increase in the number of pixels in 
> their displays. The table below shows the animation speed of each model in 
> milliseconds per frame and frames per second.
> 
>     | Product Name  | Speed (ms) | Rate (fps) |
>     | ------------- |:----------:|:----------:|
>     | Kobo Touch B  | 125        | 8.0        |
>     | Kobo Touch C  | 130        | 7.7        |
>     | Kobo Glo HD   | 140        | 7.1        |
>     | Kobo Clara HD | 145        | 6.9        |
> 
> ----------------
> 
> Commits:
>  - aa335246: 8227425: Add support for e-paper displays on i.MX6 devices
> 
> Changes: https://git.openjdk.java.net/jfx/pull/60/files
>  Webrev: https://webrevs.openjdk.java.net/jfx/60/webrev.00
>   Issue: https://bugs.openjdk.java.net/browse/JDK-8227425
>   Stats: 238 lines in 7 files changed: 193 ins; 2 del; 43 mod
>   Patch: https://git.openjdk.java.net/jfx/pull/60.diff
>   Fetch: git fetch https://git.openjdk.java.net/jfx pull/60/head:pull/60

/signed

PR: https://git.openjdk.java.net/jfx/pull/60

Reply via email to