Ouch, an e-mail wasn't sent to the mailing list because I sent it direct. I rewrite the wrong part and send it again.
On 2019/06/05 22:24, John Benediktsson wrote: > Or clear the cache each time, so you don’t have to be lower level code... >> On Jun 5, 2019, at 4:24 AM, Alexander Ilin <ajs...@yandex.ru>wrote: I think >> the pairs of {font, string} are cached and only drawn once by the GUI >> framework. I think you need to call the drawing code more directly to get >> real performance data. Thank you, Alexander and John. I decided to measure only internal processing time. On my machine, my code took 9 to 10 times longer to make a text image with a transparent background than it did with an opaque background. ! Copyright (C) 2019 KUSUMOTO Norio. ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors locals math formatting ui ui.gadgets.labels ui.commands ui.gadgets ui.gadgets.toolbar ui.gadgets.tracks ui.gestures fonts colors tools.time memory math.ranges namespaces arrays sequences windows.uniscribe windows.uniscribe.private ; IN: uni-bench TUPLE: uni-bench-gadget < track opaque-font transparent-font opaque-time transparent-time ; : <uni-bench-gadget> ( -- gadget ) vertical uni-bench-gadget new-track <font> "monospace" >>name T{ rgba f 0.0 0.0 0.0 1.0 } >>foreground T{ rgba f 0.0 0.0 1.0 1.0 } >>background 36 >>size >>opaque-font <font> "monospace" >>name T{ rgba f 0.0 0.0 0.0 1.0 } >>foreground T{ rgba f 0.0 0.0 1.0 0.0 } >>background 36 >>size >>transparent-font { " script-string>image " "" " Press any of the keys listed below" "" " 1: Opaque background \"9999\" (1000 times)" " 2: Transparent background \"9999\" (1000 times) " "" } <label> f track-add "" <label> >>opaque-time "" <label> >>transparent-time dup opaque-time>> " Opaque background:" label-on-left f track-add dup transparent-time>> " Transparent:background" label-on-left f track-add ; :: com-benchmark-opaque-script-string>image ( gadget -- ) gadget opaque-font>> :> test-font gc [ 1000 [ test-font "9999" <script-string> script-string>image drop ] times ] benchmark gadget opaque-time>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; :: com-benchmark-transparent-script-string>image ( gadget -- ) gadget transparent-font>> :> test-font gc [ 1000 [ test-font "9999" <script-string> script-string>image drop ] times ] benchmark gadget transparent-time>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; uni-bench-gadget "gestures" f { { T{ key-down { sym "1" } } com-benchmark-opaque-script-string>image } { T{ key-down { sym "2" } } com-benchmark-transparent-script-string>image } } define-command-map MAIN-WINDOW: uni-bench { { title "Uniscribe benchmark" } } <uni-bench-gadget> >>gadgets ; -- KUSUMOTO Norio > 2019/06/05 22:24、John Benediktsson <mrj...@gmail.com> のメール: > > Or clear the cache each time, so you don’t have to be lower level code... > > >> On Jun 5, 2019, at 4:24 AM, Alexander Ilin <ajs...@yandex.ru> wrote: >> >> I think the pairs of {font, string} are cached and only drawn once by the >> GUI framework. >> I think you need to call the drawing code more directly to get real >> performance data. >> >> 04.06.2019, 07:39, "KUSUMOTO, Norio" <kusum...@na.rim.or.jp>: >>> My code was uploaded. >>> >>> https://github.com/kusumotonorio/factor/blob/win-transparent-background-text/basis/windows/uniscribe/uniscribe.factor >>> >>> I want to know how slow the code when it draws transparent background >>> texts. So I am writing >>> a test app to know it. But it has an issue. >>> I try to measure time by actually drawing a label with a transparent >>> background over and over again, and that happens very quickly. >>> Creating an image from text takes a long time (3: and 4:) , so it should >>> actually take longer. >>> What's wrong with my code? >>> >>> ! Copyright (C) 2019 KUSUMOTO Norio. >>> ! See http://factorcode.org/license.txt for BSD license. >>> USING: kernel accessors locals math formatting ui ui.gadgets.labels >>> ui.commands ui.gadgets ui.gadgets.toolbar ui.gadgets.tracks ui.gestures >>> fonts colors tools.time memory math.ranges namespaces arrays sequences >>> windows.uniscribe windows.uniscribe.private ; >>> IN: uni-bench >>> >>> TUPLE: uni-bench-gadget < track >>> opaque-label >>> transparent-label >>> opaque-time >>> transparent-time ; >>> >>> SYMBOL: test-strings >>> V{ } clone test-strings set-global >>> 1 5000 [a,b] [ >>> "%04d" sprintf test-strings get push >>> ] each >>> test-strings get >array test-strings set-global >>> >>> : <uni-bench-gadget> ( -- gadget ) >>> vertical uni-bench-gadget new-track >>> { >>> " Press any of the keys listed below" >>> "" >>> " 1: Opaque background label (5000 times)" >>> " 2: Transparent background label (5000 times)" >>> " 3: Opaque script-string>image (5000 times)" >>> " 4: Transparent script-string>image (5000 times)" >>> "" >>> } <label> f track-add >>> >>> "0000" <label> >>opaque-label >>> "0000" <label> >>transparent-label >>> "" <label> >>opaque-time >>> "" <label> >>transparent-time >>> >>> dup opaque-label>> >>> <font> >>> "monospace" >>name >>> T{ rgba f 0.0 0.0 0.0 1.0 } >>foreground >>> T{ rgba f 0.0 0.0 1.0 1.0 } >>background >>> 36 >>size >>>>> font f track-add >>> >>> dup transparent-label>> >>> <font> >>> "monospace" >>name >>> T{ rgba f 0.0 0.0 0.0 1.0 } >>foreground >>> T{ rgba f 0.0 0.0 1.0 0.0 } >>background >>> 36 >>size >>>>> font f track-add >>> >>> dup opaque-time>> " Opaque:" label-on-left f track-add >>> dup transparent-time>> " Transparent:" label-on-left f track-add ; >>> >>> :: com-benchmark-opaque ( gadget -- ) >>> gadget opaque-label>> :> test-label >>> gc >>> [ >>> test-strings get-global [ >>> test-label swap >>text relayout-1 >>> ] each >>> ] benchmark >>> gadget opaque-time>> >>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; >>> >>> :: com-benchmark-transparent ( gadget -- ) >>> gadget transparent-label>> :> test-label >>> gc >>> [ >>> test-strings get-global [ >>> test-label swap >>text relayout-1 >>> ] each >>> ] benchmark >>> gadget transparent-time>> >>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; >>> >>> :: com-benchmark-opaque-script-string>image ( gadget -- ) >>> gadget opaque-label>> font>> :> test-font >>> gc >>> [ >>> test-strings get-global [ >>> test-font swap <script-string> script-string>image drop >>> ] each >>> ] benchmark >>> gadget opaque-time>> >>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; >>> >>> :: com-benchmark-transparent-script-string>image ( gadget -- ) >>> gadget transparent-label>> font>> :> test-font >>> gc >>> [ >>> test-strings get-global [ >>> test-font swap <script-string> script-string>image drop >>> ] each >>> ] benchmark >>> gadget transparent-time>> >>> swap 1000000 / "%d ms" sprintf >>text relayout-1 ; >>> >>> uni-bench-gadget "gestures" f { >>> { T{ key-down { sym "1" } } com-benchmark-opaque } >>> { T{ key-down { sym "2" } } com-benchmark-transparent } >>> { T{ key-down { sym "3" } } com-benchmark-opaque-script-string>image } >>> { T{ key-down { sym "4" } } >>> com-benchmark-transparent-script-string>image } >>> } define-command-map >>> >>> M: uni-bench-gadget pref-dim* drop { 300 250 } ; >>> >>> MAIN-WINDOW: uni-bench { { title "Uniscribe benchmark" } } >>> <uni-bench-gadget> >>gadgets ; >>> >>>> On 2019/05/30 21:17, KUSUMOTO Norio wrote: >>>> Thank you, Alexander! I will read it and study. I tried the idea I >>>> wrote earlier. I've only tried a little, but it seems to work well. >>>> Yay! <https://pbs.twimg.com/media/D70GEGkVUAUxgWb.png> -- KUSUMOTO Norio >>>>> 2019/05/30 20:19、Alexander Ilin <ajs...@yandex.ru>のメール: Hello! I >>>>> think I have figured out the algorithm for the image processing. I'm >>>>> not sure if it's the same one that you came up with. >>>>> https://github.com/factor/factor/issues/152#issuecomment-497292323 >>>>> Also, I don't know if there are standard WinApi functions to perform >>>>> the necessary operation, namely copying a color channel into the >>>>> alpha channel, but I suspect there might be, in which case we won't >>>>> lose performance there. 30.05.2019, 03:50, "KUSUMOTO Norio" >>>>> <kusum...@na.rim.or.jp>: >>>>>> Although it seems that to transfer the appropriate data to the >>>>>> device context is the 'right' solution, I have a hunch that it will >>>>>> be a difficult task. So I am beginning to think that we should take >>>>>> another, a cheat, approach. It's like a chroma key. Uniscribe draws >>>>>> text with a color background instead of transparency, and a word >>>>>> replaces the color with transparency when converting from the bitmap >>>>>> to an Factor's image. It may be slow, but we don't have many chances >>>>>> to draw characters on a transparent background. And for example, on >>>>>> a button label, once Factor creates an image with such characters, >>>>>> Factor use the image again, so I think there are few problems. This >>>>>> approach can localize changes. I can't define the word for image >>>>>> conversion to do such a special action, but I think that it's not a >>>>>> difficult task for someone familiar with image processing words. >>>>> ---=====--- Александр _______________________________________________ >>>>> Factor-talk mailing list Factor-talk@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/factor-talk >>>> _______________________________________________ Factor-talk mailing >>>> list Factor-talk@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/factor-talk >>> >>> _______________________________________________ >>> Factor-talk mailing list >>> Factor-talk@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/factor-talk >> >> ---=====--- >> Александр >> >> >> >> _______________________________________________ >> Factor-talk mailing list >> Factor-talk@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/factor-talk > > > _______________________________________________ > Factor-talk mailing list > Factor-talk@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/factor-talk _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk