The icon has also been referred to as the spinning beach ball or, unofficially, the Spinning Beach Ball of Death, the Spinning Pizza of Death (frequently encountered across Mac users forums as The SPOD), the Marble of Doom, or the Pinwheel of Death. The OS X Human Interface Guidelines officially refers to it as the spinning wait cursor, noting also that the developer term cursor is equivalent to the user term pointer.
A wristwatch was the first wait cursor in early versions of Mac OS. Apple's HyperCard first popularized animated cursors, including a black and white spinning quartered circle resembling a beach ball. The cursors could be advanced by repeated HyperTalk invocations of "set cursor to busy". The beach ball cursor was also adopted to indicate running script code in the HyperTalk-like AppleScript.
These cursors would be activated by an application when it was performing a lengthy operation. (Microsoft Windows would later adopt the Apple Lisa hourglass for the same concept.) Some versions of the Apple Installer used an animated "counting hand" cursor; other applications provided their own theme-appropriate custom cursors, such as a revolving Yin Yang symbol, Fetch's running dog, Retrospect's spinning tape, and Pro Tools' tapping fingers. Apple provided standard interfaces for animating cursors: originally the Cursor Utilities (SpinCursor, RotateCursor) and, in Mac OS 8 and later, the Appearance Manager (SetAnimatedThemeCursor).
In Mac OS X, Apple used the NeXTSTEP rainbow-colored spinning optical disk cursor. In OS X 10.0 and 10.1, the cursor had a two dimensional appearance, essentially unchanged from NeXT. Mac OS X 10.2 gave the cursor a glossy rounded "gumdrop" look in keeping with other OS X interface elements. In Mac OS X 10.11, the cursor was changed to a flatter image. The presence of preemptive multitasking under OS X changed the cursor's meaning. Rather than being an indication that an application was performing an action it expected to take a while, it meant that the system software had noticed that an application had stopped responding to events. This could indicate that the application was in an infinite loop, or just performing a lengthy operation and ignoring events.
At WWDC 2015, Apple released OS X 10.11 El Capitan Beta for developers. The spinning pinwheel in this version of OS X was updated to the new design with less shadow and brighter, more solid colors.
Each application has an event queue that receives events from the operating system (for example key presses and mouse button clicks). If an application takes longer than 2 seconds to process the events in its event queue (regardless of the exact cause) the operating system displays the wait cursor whenever the cursor hovers over that application's windows.
This is meant to indicate that the application is temporarily unresponsive, a state from which the application may recover, however it may also indicate that the application has entered an unrecoverable state. This prevents the user from closing, resizing, or even minimizing the windows of that application. Users can choose to terminate an unresponsive application, by using "Force Quit" under the Apple menu, the keystroke command-option-escape, or the Force Quit command found by control-clicking (or right-clicking) the icon of an unresponsive application in the Dock.
While one application is unresponsive, typically other applications are usable in the meantime.
Guidelines, tools and methods for developers
Possible causes include:
- By default, events (and any actions they initiate) are processed sequentially. This design works well when each event leads to only a trivial amount of processing, which causes the application to appear responsive. However, if the processing takes too long, the spinning wait cursor will appear until the operation is complete. Developers may prevent this happening by performing processing on a separate thread, allowing the application's main thread to continue responding to events. However, this greatly increases the application complexity.
- Bugs in applications can cause them to stop responding to events; for instance, an infinite loop or a deadlock. Applications that do this rarely recover.
- Problems with the virtual memory system such as slow paging caused by a spun-down hard disk (or, potentially, read errors) will cause the wait cursor to appear. In this case, multiple applications will display the wait cursor as they attempt to access memory that must be paged in until the hard disk and virtual memory system recover.
Instruments is an application that comes with the Mac OS X Developer Tools. Along with its other functions, it allows the user to monitor and sample applications that are either not responding or performing a lengthy operation. Each time an application does not respond and the spinning wait cursor is activated, Instruments can sample the process to determine which code is causing the application to stop responding. With this information, the developer can rewrite code to avoid the cursor being activated.
- "Mini-Tutorial: The dreaded spinning pinwheel; Avoiding unresponsiveness/slow-downs in Mac OS X". CNet. 10 March 2005. Retrieved 16 July 2012.
- Swain, Gregory E. (28 May 2010). "Troubleshoot the spinning beach ball". MacWorld. Retrieved 16 July 2012.
- Todd, Charlie (9 March 2012). "Spinning Beach Ball of Death". Improv Everywhere. Retrieved 16 July 2012.
- "OS X Human Interface Guidelines". Apple, Inc. Retrieved 18 October 2012.
- "Using the Cursor Utilities (IM: Im)". Developer.apple.com. Retrieved 2010-04-30.
- "SetAnimatedThemeCursor". Developer.apple.com. Retrieved 2010-04-30.
- Ars Technica Jaguar review
- "WWDC 2012 – Session 709 – What’s New in the File System" (PDF). Apple. Retrieved 2015-06-15.
Applications SPOD if they don’t service the event loop for two seconds
- Apple Human Interface Guidelines: Standard Cursors from Apple's website.
- Perceived Responsiveness: Avoid the Spinning Cursor from Apple's website.
- Troubleshooting the "Spinning Beach Ball of Death" Excerpt from “Troubleshooting Mac OS X” book where there are some information on how to deal with Spinning Wait Cursor problems.