Tuesday, February 22, 2022

The cats sitting on a fence in early builds of Windows 8

Raymond

The Windows 8 tablet experience organized its components as a collection of layers, with each layer stacked on top of the next one. For the purpose of today’s discussion, the important layers are the Start layer and the Apps layer: If you’re using an app, then the Apps layer is full screen. If you have opened Start, then the Start layer covers the Apps layer. If the last app exits, then Start automatically opens. There should be a fullscreen layer at all times.

During development, of course, something inevitably goes wrong, and you get into states where neither the Start nor the Apps layer is being shown, resulting in a black screen.

Now, a black screen could have multiple causes. The video driver may have crashed. Or the video driver could be working fine, but the compositor has crashed, so that nothing is being given to the video driver. Or the compositor could be working fine, but the shell has crashed, so the compositor has nothing to render. Or the shell could be running, but it simply forgot to put something on the screen.

For that last case, the Windows 8 shell created a backstop window that sat at a layer below all of the other layers. If none of the other layers were present, then at least you got a backstop window. And in early debug builds, that backstop window contained an ASCII drawing of cats. That way, if you saw cats, you knew that you were in that last failure case: The shell is running but forgot to put something on the screen.

Why cats?

I guess the developer who wrote the backstop window liked cats.

In fact, the developer who wrote the backstop window liked cats so much, they had a series of cat pictures. At system startup, they drew the first cat picture onto the backstop window, and each time the backstop window was asked to repaint, they cycled to the next picture. It was like a story that was told one sentence at a time, with each sentence revealed the next time there was a catastrophic failure.

In practice, the full story was never told, since we almost never got past even the first picture.

Until now.

Here are the backstop window cat pictures.

Frame 1:

              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
       *           MMM88&&&&&&&&                
                   MMM88&&&&&&&&                
                   ‘MMM88&&&&&&’                
                     ‘MMM8&&&’      *           
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |( (  |  |  | ))  |  |  |  |  |  | 
    |  |  |  | ) ) |  |  |//|  |  |  |  |  |  | 
    |  |  |  |(_(  |  |  (( |  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 2: The cats wag their tails.

              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
       *           MMM88&&&&&&&&                
                   MMM88&&&&&&&&                
                   ‘MMM88&&&&&&’                
                     ‘MMM8&&&’      *           
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 3: The moon and stars begin to set.

                                                
              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
       *           MMM88&&&&&&&&                
                   MMM88&&&&&&&&                
                   ‘MMM88&&&&&&’                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 4:

                                                
                                                
              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
       *           MMM88&&&&&&&&                
                   MMM88&&&&&&&&                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 5:

                                                
                                                
                                                
              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
       *           MMM88&&&&&&&&                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 6:

                                                
                                                
                                                
                                                
              *     ,MMM8&&&.            *      
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 7:

                                                
                                                
                                                
                                                
                                                
                    MMMM88&&&&&    .            
                   MMMM88&&&&&&&                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 8:

                                                
                                                
                                                
                                                
                                                
                                                
                   MMMM88&&&&&&&                
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

Frame 9:

                                                
                                                
               __________________               
               |Good Night Moon!|               
               \   ==============               
                | /                             
                \/                              
            |\___/|     /\___/\                 
            )     (     )    ~( .              ‘
           =\     /=   =\~    /=                
             )===(       ) ~ (                  
            /     \     /     \                 
            |     |     ) ~   (                 
           /       \   /     ~ \                
           \       /   \~     ~/                
    _/\_/\_/\__  _/_/\_/\__~__/_/\_/\_/\_/\_/\_ 
    |  |  |  |) )| |  |  (( |  |  |  |  |  |  | 
    |  |  |  ( ( | |  |  |\\|  |  |  |  |  |  | 
    |  |  |  |)_)  |  |  |))|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |\)|  |  |  |  |  |  | 
    |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 

If you were so unlucky to have the backstop window called into action more than nine times, it ran the animation backward once it reached the end, and then started over. Here’s the full animation:

When something went wrong and the backstop window became visible, we would say that we saw the cats.

The cats hung around for a while, until the performance team asked us to remove them. You see, ASCII art uses a monospace font, and the cats screen was the only part of the startup sequence that used a monospace font. Drawing the backstop window was forcing the rasterization of an entirely new font, which was costing time and memory for something that shouldn’t ever be seen in the first place.

Sorry, cat lovers.



from Hacker News https://ift.tt/7x1lQSg

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.