[Cuis-dev] Bug fix: Image freezes when inspecting objects with huge #printOn: results

Juan Vuletich juan at cuis.st
Wed Nov 1 06:58:09 PDT 2023


On 10/31/2023 8:09 PM, Andres Valloud via Cuis-dev wrote:
> Yeah, sometimes trying to be helpful (sorting the keys) ends up being 
> too helpful.
>
> But let's say something equivalent to this turned up again later.  
> Does this mean that any operation related to the GUI that does not 
> finish quickly enough will hang the image?

I tried to address that with update #6066, but today I'm not happy with 
it. Just pushed #6068. The strategy is now to not let any #stepMessage 
use more than 50%CPU.

Thanks,

>
> On 10/31/23 2:53 PM, Juan Vuletich wrote:
>> Hi Andrés,
>>
>> On 10/31/2023 12:51 AM, Andres Valloud via Cuis-dev wrote:
>>> Generally, no tools should cause too much demands on the running 
>>> system, because you never know if the user will need the tools to 
>>> diagnose a low resource situation.  Object>>printStringLimitedTo:?
>>
>> Yes. Precisely. That's what is being used here. The problem was that 
>> calling #printStringLimitedTo: on a Dictionary involved sorting the 
>> keys before the streaming starts. This could mean an unbounded amount 
>> of time, even if the actual number of keys actually printed could be 
>> really small!
>>
>> So, the solution is simply _not_ to sort the keys.
>>
>> Thanks,
>>
>>>
>>> On 10/30/23 2:40 PM, Juan Vuletich via Cuis-dev wrote:
>>>> On 10/29/2023 6:28 PM, Nicolás Papagna Maldonado via Cuis-dev wrote:
>>>>> Hi folks,
>>>>>
>>>>> The attached changeset fixes a bug that caused the image to freeze 
>>>>> when inspecting objects with huge #printOn: results.
>>>>>
>>>>> To reproduce the error:
>>>>>
>>>>>  1. Open a workspace
>>>>>  2. Evaluate CompiledMethod allInstances inject: Dictionary new into:
>>>>>     [ :dict :method |  dict at: method put: method sourceCode. dict ]
>>>>>  3. An inspector will be opened on the dictionary created above Click
>>>>>     on self
>>>>>  4. Notice the image hangs while waiting for the #printOn: message 
>>>>> send.
>>>>>
>>>>> To fix this bug, I limited the time to print the selected item to 
>>>>> 300 milliseconds and showed an appropriate error message when that 
>>>>> happened.
>>>>>
>>>>> LMK your thoughts.
>>>>>
>>>>> Cheers,
>>>>> Nico PM
>>>>
>>>> Hi Nico,
>>>>
>>>> I think that using #valueWithin:onTimeout: is like shooting a 
>>>> mosquito with a gun. I preferred a solution with two parts:
>>>> - printing a Dictionary doesn't need to sort the keys. Dictionaries 
>>>> are not sorted.
>>>> - Any stepping morph that takes longer than its #stepTime will be 
>>>> limited in its stepping time so GUI stays (barely) responsive.
>>>>
>>>> Updates now at GitHub.
>>>>
>>>> Thanks,
>>>>
>>>> -- 
>>>> Juan Vuletich
>>>> cuis.st
>>>> github.com/jvuletich
>>>> researchgate.net/profile/Juan-Vuletich
>>>> independent.academia.edu/JuanVuletich
>>>> patents.justia.com/inventor/juan-manuel-vuletich
>>>> linkedin.com/in/juan-vuletich-75611b3
>>>> twitter.com/JuanVuletich
>>>>
>>>>
>>
>>


-- 
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich



More information about the Cuis-dev mailing list