KR20160022362A - 상태 정보를 위한 동기화 지점 - Google Patents

상태 정보를 위한 동기화 지점 Download PDF

Info

Publication number
KR20160022362A
KR20160022362A KR1020167001549A KR20167001549A KR20160022362A KR 20160022362 A KR20160022362 A KR 20160022362A KR 1020167001549 A KR1020167001549 A KR 1020167001549A KR 20167001549 A KR20167001549 A KR 20167001549A KR 20160022362 A KR20160022362 A KR 20160022362A
Authority
KR
South Korea
Prior art keywords
thread
gui
synchronization point
display tree
executing
Prior art date
Application number
KR1020167001549A
Other languages
English (en)
Other versions
KR102040359B1 (ko
Inventor
크리스티안 포티니
브라이언 이. 맨도스
그랜트 에이. 워터스
리-신 후앙
리차드 케이. 제임스
사무엘 알. 포티너
알. 스코트 브릭스
서지 지. 맬킨
유안제 왕
리코 마리아니
저스틴 이. 로저스
안잘리 에스. 파리크
라오 프라빈 쿠마 무랄리다
매튜 피. 코트세나스
제이슨 제이. 웨버
니란쿠시 판츠바이
로센 아타나소브
피터 살라스
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160022362A publication Critical patent/KR20160022362A/ko
Application granted granted Critical
Publication of KR102040359B1 publication Critical patent/KR102040359B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/20Pc systems
    • G05B2219/23Pc programming
    • G05B2219/23258GUI graphical user interface, icon, function bloc editor, labview
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/545Gui

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Human Computer Interaction (AREA)
  • Computer Graphics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

상태 정보를 위한 동기화 지점에 대한 기술이 설명된다. 적어도 몇몇 실시형태에서, 동기화 지점은 상이한 프로세싱 스레드 사이에서 상태 정보를 전파하기 위해 활용된다. 동기화 지점은, 예를 들면, 상이하며 독립적으로 실행하는 스레드 사이에서 상태 정보를 전파하기 위해 활용될 수 있다. 따라서, 적어도 몇몇 실시형태에서, 동기화 지점은 상이하며 독립적으로 실행하는 스레드 사이에서 스레드간 통신(inter-thread communication)으로서 기능한다.

Description

상태 정보를 위한 동기화 지점{SYNCHRONIZATION POINTS FOR STATE INFORMATION}
오늘날의 컴퓨팅 디바이스는 프로세싱 파워의 양이 계속 증가하고 있다. 예를 들면, 통상적인 디바이스는, 데이터 프로세싱을 각각 수행할 수 있는 다수의 프로세싱 코어를 갖는 중앙 프로세싱 유닛(central processing unit; CPU)을 구비한다. 또한, 개개의 프로세서 상에서 이용가능한 코어의 수는 계속 증가하고 있다. 다중 코어 프로세서의 보급과 함께, CPU 상에서 다수의 프로세싱 작업(task)을 병렬로 수행하는 능력이 나타난다. 예를 들면, 특정 프로세싱 작업을 각각 핸들링하는 다수의 프로세싱 스레드는 프로세서의 각각의 코어 상에서 동시에 실행할 수 있다. 따라서, 이전의 단일 코어의 프로세서에 비해, 다수의 작업이 완료될 수 있는 속도가 증가된다.
이용가능한 프로세싱 파워가 증가하였지만, 많은 컴퓨팅 프로세스는, 프로세싱 작업을 스케줄링하고/하거나 관리하는 데 여전히 순차적인 프로세싱 방식을 활용한다. 예를 들면, 몇몇 애플리케이션은 소정의 프로세싱 작업을 병렬화하도록 구성되지 않으며, 따라서 다중 코어 프로세서의 병렬 프로세싱 성능을 활용하지 않는다. 프로세싱 작업을 병렬화하지 않는 것에 의해, 이들 프로세스는 병렬 프로세싱으로부터 유래하는 퍼포먼스 이점을 받지 않는다.
이 개요는 하기의 상세한 설명에서 더 설명되는 개념의 선택을 간소화된 형태로 소개하기 위해 제공된다. 이 개요는 청구되는 주제의 주요한 특징 또는 본질적인 특징을 식별하도록 의도된 것도 아니고, 청구되는 주제의 범위를 결정함에 있어서 보조로서 사용되도록 의도된 것도 아니다.
상태 정보를 위한 동기화 지점에 대한 기술이 설명된다. 적어도 몇몇 실시형태에서, 동기화 지점은 상이한 프로세싱 스레드 사이에서 상태 정보를 전파하기 위해 활용된다. 동기화 지점은, 예를 들면, 상이하며 독립적으로 실행하는 스레드 사이에서 상태 정보를 전파하기 위해 활용될 수 있다. 따라서, 적어도 몇몇 실시형태에서, 동기화 지점은 상이하며 독립적으로 실행하는 스레드 사이에서 스레드간 통신(inter-thread communication)으로서 기능한다.
첨부된 도면을 참조로 상세한 설명이 설명된다. 도면에서, 도면 부호의 가장 왼쪽의 숫자(들)는 그 도면 부호가 처음 나타나는 도면을 식별한다. 설명 및 도면의 상이한 인스턴스에서의 동일한 도면 부호의 사용은 유사한 또는 동일한 아이템을 나타낼 수도 있다.
도 1은 본원에서 논의되는 기술을 활용하도록 동작가능한 예시적인 구현예에서의 환경의 예시이다.
도 2는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오를 예시한다.
도 3은 하나 이상의 실시형태에 따른 예시적인 구현 시나리오를 예시한다.
도 4는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오를 예시한다.
도 5는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오를 예시한다.
도 6은 하나 이상의 실시형태에 따른 예시적인 구현 시나리오를 예시한다.
도 7은 하나 이상의 실시형태에 따른 방법에서의 단계를 설명하는 흐름도이다.
도 8은 하나 이상의 실시형태에 따른 방법에서의 단계를 설명하는 흐름도이다.
도 9는 도 1을 참조로 설명되는 바와 같은 예시적인 시스템 및 컴퓨팅 디바이스를 예시하는데, 이들은 본원에서 설명되는 기술의 실시형태를 구현하도록 구성된다.
개관
상태 정보를 위한 동기화 지점에 대한 기술이 설명된다. 적어도 몇몇 실시형태에서, 동기화 지점은 상이한 프로세싱 스레드 사이에서 상태 정보를 전파하기 위해 활용된다. 동기화 지점은, 예를 들면, 상이하며 독립적으로 실행하는 스레드 사이에서 상태 정보를 전파하기 위해 활용될 수 있다.
예를 들면, 웹 브라우저가 웹페이지를 디스플레이하는 시나리오를 고려한다. 본원에서 논의되는 기술은 웹페이지에 대한 다양한 프로세싱, 예컨대 웹페이지 포맷팅 작업, 레이아웃 작업, 입력 프로세싱 작업 등등을 수행하기 위해 제1 스레드를 활용할 수 있다. 웹페이지에 대한 픽셀 데이터를 생성하는 것 및 픽셀 데이터가 디스플레이되게 하는 것과 같은, 웹페이지에 대한 렌더링 작업을 수행하기 위해, 제2의 독립적으로 실행하는 스레드가 활용될 수 있다.
웹페이지의 시각적 속성의 프로세싱에 기초하여, 제1 스레드는 웹페이지에 대한 시각적 상태 정보를 포함하는 동기화 지점을 방출할 수 있다. 시각적 상태 정보는, 예를 들면, 웹페이지의 시각적 상태에 대한 변경, 예컨대 웹페이지의 그래픽 엘리먼트의 이동, 그래픽 엘리먼트의 리사이징 및/또는 재채색(recoloring) 등등을 포함할 수 있다. 동기화 지점을 방출한 이후, 제1 스레드는, 추가적인 동기화 지점을 생성하는 것과 같은 다른 프로세싱을 계속 수행할 수도 있다.
예시적인 시나리오에 대해 추가적으로, 제2 스레드는 제1 스레드에 의해 방출되는 동기화 지점을 검색하여(retrieve) 프로세싱하고, 동기화 지점으로부터의 상태 정보에 기초하여 웹페이지를 렌더링할 수 있다. 따라서, 제1 스레드는 동기화 지점을 프로세싱하는 제2 스레드 프로세싱에 의존하지 않으며, 제2 스레드가 동기화 지점에 기초하여 프로세싱하고 있고/있거나 렌더링하고 있는 동안, 다양한 다른 타입의 프로세싱을 수행할 수도 있다.
따라서, 적어도 몇몇 실시형태에서, 동기화 지점은, 상이하며 독립적으로 실행하는 스레드 사이에서 상태 정보가 전파되는 것을 가능하게 하는 스레드간 통신으로서 기능한다.
하기의 논의에서는, 본원에서 설명되는 기술을 활용하도록 동작가능한 예시적인 환경이 먼저 설명된다. 다음으로, "예시적인 구현 시나리오"로 명칭이 부여된 섹션이 하나 이상의 실시형태에 따른 몇몇 예시적인 구현 시나리오를 설명한다. 이것에 후속하여, "예시적인 프로시져"로서 명칭이 부여된 섹션이 하나 이상의 실시형태에 따른 몇몇 예시적인 방법을 설명한다. 최종적으로, "예시적인 시스템 및 디바이스"로 명칭이 부여된 섹션이, 하나 이상의 실시형태에 따른, 본원에서 설명되는 기술을 활용하도록 동작가능한 예시적인 시스템 및 디바이스를 설명한다.
하나 이상의 실시형태에 따른 예시적인 구현예의 개관이 제시되었지만, 이제, 예시적인 구현예가 활용될 수 있는 예시적인 환경을 고려한다.
예시적인 환경
도 1은 본원에서 설명되는 상태 정보를 위한 동기화 지점에 대한 기술을 활용하도록 동작가능한 예시적인 구현예에서의 환경(100)의 예시이다. 예시된 환경(100)은, 다양한 방식으로 구성될 수도 있는 컴퓨팅 디바이스(102)를 포함한다. 예를 들면, 컴퓨팅 디바이스(102)는, 도 9와 관련하여 추가적으로 설명되는 바와 같이, 전통적인 컴퓨터(예를 들면, 데스크탑 퍼스널 컴퓨터, 랩탑 컴퓨터 등등), 이동국(mobile station), 엔터테인먼트 어플라이언스(entertainment appliance), 텔레비전에 통신적으로 커플링되는 셋탑 박스, 무선 전화, 넷북, 게임 콘솔, 핸드헬드 디바이스(예를 들면, 태블릿) 등등으로서 구성될 수도 있다.
컴퓨팅 디바이스(102)는 프로세서(104)를 포함하는데, 프로세서(104)는 컴퓨팅 디바이스(102)에 대한 다양한 타입의 데이터 프로세싱을 수행하는 기능성을 대표한다. 예를 들면, 프로세서(104)는 컴퓨팅 디바이스(102)의 중앙 프로세싱 유닛(CPU)를 나타낼 수 있다. 프로세서(104)는, 프로세싱 작업을 개별적으로 수행할 수 있는 다수의 프로세서 코어를 포함한다. 따라서, 프로세서(104)는, 다수의 프로세싱 스레드를 동시에 실행하는 것과 같은 병렬 프로세싱을 수행하도록 구성된다. 프로세서(104)의 구현의 추가예가 하기에서 도 9를 참조로 논의된다.
컴퓨팅 디바이스(102)는 애플리케이션(106)을 더 포함하는데, 애플리케이션(106)은 컴퓨팅 디바이스(102)를 통해 다양한 작업을 수행하는 기능성을 대표한다. 애플리케이션(106)의 예는 워드 프로세싱 애플리케이션, 이메일 애플리케이션, 컨텐츠 편집 애플리케이션, 게임용 애플리케이션 등등을 포함한다.
애플리케이션(106)은 웹 플랫폼 애플리케이션(108)을 포함하는데, 웹 플랫폼 애플리케이션(108)은 웹 컨텐츠와 연계하여 동작하는 애플리케이션을 대표한다. 웹 플랫폼 애플리케이션(108)은, 예를 들면, 비제한적인 예로서, 유니폼 리소스 로케이터(uniform resource locator; URL), 하이퍼텍스트 트랜스퍼 프로토콜(Hypertext Transfer Protocol; HTTP), 레프리젠테셔널 스테이트 트랜스퍼(Representational State Transfer; REST), 하이퍼텍스트 마크업 랭귀지(HyperText Markup Language; HTML), 캐스케이딩 스타일 시트(Cascading Style Sheets; CSS), 자바스크립트, 다큐먼트 오브젝트 모델(Document Object Model; DOM)뿐만 아니라, 다른 기술과 같은 많은 상이한 타입의 기술을 포함하고 사용할 수 있다. 웹 플랫폼 애플리케이션(108)은 또한 다양한 데이터 포맷 예컨대 확장가능 애플리케이션 마크업 랭귀지(Extensible Application Markup Language; XAML), 확장가능 마크업 랭귀지(Extensible Markup Language; XML), 자바스크립트 오브젝트 노테이션(JavaScript Object Notation; JSON) 등등과 함께 작동할 수 있다. 웹 플랫폼 애플리케이션(108)의 예는 웹 브라우저, 웹 애플리케이션(예를 들면, "웹 앱") 등등을 포함한다.
프로세스 매니저 모듈(110)이 추가적으로 예시되는데, 프로세스 매니저 모듈(110)은 컴퓨팅 디바이스(102)에 대한 프로세싱 작업의 다양한 양태를 관리하는 기능성을 대표한다. 그래픽 모듈(112)이 또한 포함되는데, 그래픽 모듈(112)은 컴퓨팅 디바이스(102)에 대한 다양한 그래픽 관련 작업을 수행하는 기능성을 대표한다. 예를 들면, 그래픽 모듈(112)은 그래픽 프로세싱, 렌더링 작업 등등을 수행할 수 있다. 그래픽 모듈(112)은, 예를 들면, 애플리케이션(106), 예컨대 웹 플랫폼 애플리케이션(108)에 대한 렌더링 엔진을 나타낼 수 있다. 적어도 몇몇 실시형태에서, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은 본원에서 논의되는 상태 정보를 위한 동기화 지점에 대한 기술을 구현하도록 활용될 수 있다.
프로세스 매니저 모듈(110) 및 그래픽 모듈(112)이 애플리케이션(106)과는 별개로서 예시되지만, 이것은 제한하는 것으로 의도되지는 않는다. 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은, 이들의 각각의 기능성이 애플리케이션(106)에 의해 활용될 수 있도록, 예를 들면, 애플리케이션(106)의 일부 및/또는 확장으로서 구현될 수 있다. 추가적으로 또는 대안적으로, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은 컴퓨팅 디바이스(102)의 오퍼레이팅 시스템의 일부로서 구현될 수 있다. 프로세스 매니저 모듈(110) 및 그래픽 모듈(112)의 추가적인 동작 양태가 하기에서 논의된다.
컴퓨팅 디바이스(102)는 디스플레이 디바이스(114)를 포함하는데, 디스플레이 디바이스(114)는 컴퓨팅 디바이스(102)에 대한 그래픽을 출력하도록 구성된다. 디스플레이 디바이스(114) 상에 그래픽 유저 인터페이스(graphical user interface; GUI)(116)가 디스플레이되는데, 그래픽 유저 인터페이스(116)는 애플리케이션(106) 중 하나와 관련되는 GUI를 대표한다. GUI(116)는, 예를 들면, 웹 플랫폼 애플리케이션(108)을 통해 제시되는 웹 컨텐츠를 포함할 수 있다. 예를 들면, GUI(116)는 웹 다큐먼트, 예컨대 웹페이지를 나타낼 수 있다. 하나 이상의 실시형태에 따르면, 본원에서 논의되는 상태 정보를 위한 동기화 지점에 대한 기술은 GUI(116)에 관련되는 다양한 프로세싱 작업, 예컨대 레이아웃 프로세싱, 입력 프로세싱, 그래픽 렌더링 등등을 수행하도록 활용될 수 있다.
본원에서 설명되는 기술이 동작할 수도 있는 예시적인 환경을 설명하였지만, 이제, 하나 이상의 실시형태에 따른 몇몇 예시적인 구현 시나리오를 고려한다.
예시적인 구현 시나리오
하기의 논의는 본원에서 설명되는 상태 정보를 위한 동기화 지점에 대한 기술에 대한 몇몇 예시적인 구현 시나리오를 설명한다. 예시적인 구현 시나리오는 도 1의 환경(100), 도 9의 시스템(900), 및/또는 임의의 다른 적절한 환경에서 구현될 수도 있다. 시나리오는, 예를 들면, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)의 기능성을 나타낼 수 있다. 예를 들면, 상이한 시나리오에서 논의되는 프로세싱 스레드는 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)에 의해 생성되고/되거나 유지될 수 있다.
도 2는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오(200)를 예시한다. 시나리오(200)는 GUI(202)를 포함하는데, GUI(202)는 디스플레이될 수 있는 다양한 그래픽 엘리먼트를 대표한다. GUI(202)는, 예를 들면, 환경(100)을 참조로 상기에서 논의된 GUI(116)의 구현예를 나타낼 수 있다. GUI(202)는 시각적 엘리먼트(202a)를 포함한다.
시나리오(200)는 주 스레드(primary thread; 204) 및 렌더 스레드(render thread; 206)를 더 포함하는데, 이들은 GUI(202)를 생성하는 것, 관리하는 것, 및 렌더링하는 것의 일부로서 다양한 프로세싱 작업을 수행하도록 활용되는 스레드를 대표한다.
일반적으로, 주 스레드(204)는 GUI(202)에 대한 다양한 타입의 관리 작업을 수행하는 프로세싱 스레드를 나타낸다. 관리 작업의 예는, 예컨대 애플리케이션(106) 중 하나에 대한 GUI(202)를 생성하는 것을 포함한다. 관리 작업의 다른 예는 GUI(202)에 대한 실행 스크립트(예를 들면, JScript), GUI 포맷팅 작업, GUI 레이아웃 작업, DOM 조작(manipulation) 등등을 포함한다. 렌더 스레드(206)는, GUI(202)의 픽셀을 디스플레이에 페인팅하는 것과 같은 렌더링 동작을 수행하는 프로세싱 스레드를 나타낸다. 예를 들면, 주 스레드(204)에 의해 생성되는 GUI(202)의 시각적 양태에 대한 변경은 렌더 스레드(206)에 의해 디스플레이를 위해 렌더링될 수 있다. 다양한 실시형태에 따르면, 주 스레드(204)는, 렌더링 및 디스플레이를 위해 다양한 그래픽 정보를 렌더 스레드(206)로 전달할 수 있다.
시나리오(200)의 중심부로 진행하면, GUI(202)의 시각적 양태에 대한 변경은 주 스레드(204)로 하여금 그래픽 데이터(208)를 생성하게 한다. 그래픽 데이터(208)는, 예를 들면, GUI(202)의 시각적 양태에 대한 변경을 설명할 수 있다. 이러한 변경의 예는 색상 변경, 시각적 엘리먼트 리사이징, 시각적 엘리먼트의 애니메이션, 시각적 엘리먼트의 재배치 등등을 포함한다. 변경은, 예를 들면, 다양한 타입의 유저 입력을 통한 GUI(202)와의 유저 상호작용에 응답하여 발생할 수 있다.
그래픽 데이터(208)를 생성하는 것에 응답하여, 페인팅가능한 동기화 지점(paintable synchronization point; PSP)(210)이 생성된다. 일반적으로, PSP(210)는, GUI(202)의 일부를 렌더링하기 위해 렌더 스레드(206)에 의해 생성될 수 있는 정보의 세트를 나타낸다. PSP(210)는, 예를 들면, 그래픽 데이터(208)를 포함할 수 있고/있거나 그래픽 데이터(208)에 기초할 수 있다. 추가적으로 또는 대안적으로, PSP(210)는, 그래픽 데이터(208), 예컨대 그래픽 데이터(208)가 존재하는 메모리 어드레스 및/또는 어드레스들을 렌더 스레드(206)가 검색하는 것을 가능하게 하기에 충분한 정보를 포함할 수 있다.
적어도 몇몇 실시형태에서, PSP(210)는 GUI(202)에 대한 다양한 타입의 상태 정보를 포함한다. 예를 들면, PSP(210)는 상태 변경 정보, 예컨대, 이전의 PSP가 생성된 이후 및/또는 이전의 렌더 동작이 렌더 스레드(206)에 의해 수행된 이후 변경된 GUI(202)의 시각적 속성의 표시를 포함할 수 있다. 따라서, 하나 이상의 실시형태에 따르면, PSP(210)는 GUI(202)의 완전한 렌더링을 위한 데이터를 포함하지 않을 수도 있지만, GUI(202)를 새로운 시각적 상태로 업데이트하기에 충분한 상태 변경 정보를 단순히 나타낼 수도 있다. 그러나, 이것은 제한하는 것으로 의도된 것은 아니며, 적어도 몇몇 실시형태에서, PSP는 GUI의 완전한 렌더링을 나타낼 수 있다. 예를 들면, 실시형태는, 상태 정보를 전파시키기 위해, 부분적인 그리고 완전한 PSP 정보의 조합을 활용할 수도 있다.
PSP(210)를 방출한 이후, 주 스레드(204)는, 예를 들면, 렌더 스레드(206)가 PSP(210)를 검색하고/하거나 프로세싱하는 것을 기다리지 않고, GUI(202)에 대한 관리 작업을 계속 프로세싱할 수도 있다.
시나리오(200)의 더 낮은 부분으로 진행하면, 렌더 스레드(206)는 PSP(210)를 프로세싱하여 상태 변경(212)을 생성한다. 일반적으로, 상태 변경(212)은 PSP(210)로부터의 상태 정보에 기초한 GUI(202)의 일부의 재렌더(re-render)이다. 따라서, 상태 변경(212)은 (예를 들면, 렌더 및/또는 묘화(draw) 동작의 일부로서) GUI(202)에 적용되어 GUI(202)의 시각적 상태를, PSP(210)에 의해 나타내어지는 시각적 상태와 동기화시킨다. 이 특정 예에서, 상태 변경(212)의 적용은 시각적 엘리먼트(202a)의 재배치, 예를 들면, GUI(202) 내에서의 시각적 엘리먼트(202a)의 병진 이동(translational movement)을 야기한다.
따라서, 시나리오(200)는, 제1 스레드에 의해 생성되는 그래픽 엘리먼트의 시각적 상태에 대한 변경이, 변경을 적용하기 위해 제2 스레드에 의해 소비될 수 있는 PSP에 의해 캡슐화될 수 있다. 또한, 제1 스레드는 PSP가 방출된 이후, 예를 들면, PSP가 프로세싱되는 것을 기다리지 않고, 다른 프로세싱 작업을 계속 수행할 수도 있다. 이것은 프로세서 리소스의 효율적인 사용을 제공하고, 보다 원활한(seamless) 시각적 경험을 제공하는 것에 의해 유저 경험의 전체적인 품질을 향상시킨다. 따라서, 적어도 몇몇 실시형태에서, PSP는, 독립적인 스레드 사이에서 상태 정보가 전송될 수 있게 하는 메커니즘을 제공한다.
적어도 몇몇 실시형태에서, 본원에서 논의되는 기술은 다수의 PSP가 비동기적으로 생성되어 프로세싱되는 것을 가능하게 한다. 예를 들면, 하기의 예시적인 시나리오를 고려한다.
도 3은 하나 이상의 실시형태에 따른 예시적인 구현 시나리오(300)를 예시한다. 시나리오(300)는 GUI(302)를 포함하는데, GUI(302)는 디스플레이될 수 있는 다양한 그래픽 엘리먼트를 대표한다. GUI(302)는, 예를 들면, 환경(100)을 참조로 상기에서 논의된 GUI(116)의 구현예를 나타낼 수 있다. GUI(302)는 시각적 엘리먼트(302a)를 포함한다.
시나리오(300)는 GUI(302)에 대한 주 스레드(304) 및 렌더 스레드(306)를 더 포함한다. 주 스레드 및 렌더 스레드에 관한 예시적인 상세는 상기에서 논의되어 있다. GUI(302)에 대한 시각적 상태 변경에 기초하여, 다수의 PSP를 포함하는 PSP 큐(308)가 생성된다. 예를 들면, PSP 큐(308)는, 주 스레드(304)에 의해 생성되는 PSP(310), PSP(312), 및 PSP(314)를 포함한다. PSP는 다양한 이벤트, 예컨대 GUI(302)와의 유저 상호작용, 프로세스에 의해 생성되는 이벤트 등등에 기초하여 생성될 수 있다. 상기에서 언급된 바와 같이, PSP(310, 312, 314)는 GUI(302)의 시각적 상태에서의 변경에 대응한다. 예를 들면, PSP(310, 312, 314)는 GUI(302)에서의 시각적 엘리먼트(302a)의 이동에 대응할 수 있다.
적어도 몇몇 실시형태에서, PSP는, 렌더 스레드(306)가 PSP를 프로세싱하여 적용할 수 있는 것보다 더 빨리 PSP가 주 스레드(304)에 의해 생성될 때 PSP 큐(308)에 축적될 수 있다. 예를 들면, 렌더 스레드(306)가 복잡한 렌더 동작을 완료하기 이전에 주 스레드(304)가 추가적인 PSP를 생성하도록, 렌더 스레드(306)는 최근에 소비된 PSP에 기초하여 복잡하고 시간 소모적인 렌더 동작을 수행하고 있을 수도 있다. 따라서, PSP는, 큐에서 더 오래된 PSP가 더 새로운 PSP 앞에 높이도록, 시간적으로 순차적인 순서로 큐잉될 수 있다.
시나리오(300)의 아래 부분으로 진행하면, 렌더 스레드(306)는 PSP 큐(308)로부터 PSP(310)를 검색한다. 렌더 스레드(306)는 PSP(310)를 프로세싱하여 상태 변경(310a)을 생성한다. 상태 변경(310a)은 GUI(302)의 시각적 상태에서의 변경에 대응한다. 예를 들면, 상태 변경(310a)은 GUI(302)의 이전의 시각적 상태와 현재의 시각적 상태 사이의 차이를 나타낸다. 따라서, 적어도 몇몇 실시형태에서, PSP(310)와 따라서 상태 변경(310a)은 GUI(302)의 완전한 재렌더링을 나타내지 않지만, 그러나 GUI(302)의 일부의 시각적 상태를 업데이트하기 위해 적용될 수 있는 데이터를 포함한다.
렌더 스레드(306)는, 예컨대 GUI의 일부를 재랜더링하는 것에 의해, 상태 변경(310a)을 GUI(302)에 적용한다. 예를 들면, 렌더 스레드(306)는, PSP(310)로부터 생성되는 상태 변경(310a)으로부터의 데이터에 기초하여, 시각적 엘리먼트를 재채색하는 것, 시각적 엘리먼트를 리사이징하는 것 등등과 같이, 시각적 엘리먼트(302a)의 시각적 양태를 변경시킬 수 있다. 추가적으로 또는 대안적으로, 상태 변경(310a)을 적용하는 것은, 시각적 엘리먼트(302a)의 이동, 예컨대 병진, 회전 등등을 수반할 수 있다.
렌더 스레드(306)가 PSP(310)를 검색하여(retrieve) 프로세싱하는 것에 응답하여, PSP(312, 314)는 PSP 큐(308)에서 위로 이동한다. 따라서, 렌더 스레드(306)가 PSP(310)를 프로세싱하여 적용하는 것을 종료한 이후, 렌더 스레드(306)는 PSP(312)를 검색하여 프로세싱할 수 있다. 적어도 몇몇 실시형태에서, PSP는, 이들이 주 스레드(304)에 의해 생성되어 큐에 배치된 순서로, PSP 큐(308)로부터 렌더 스레드(306)에 의해 소비된다. PSP 큐(308)로부터의 PSP의 프로세싱은, PSP 큐(308)에서 검색되지 않고 남아 있는 추가적인 PSP가 없을 때까지, 및/또는 GUI(302)가 닫힐 때까지 계속될 수 있다.
따라서, 주 스레드(304)는 GUI(302)에 대한 다수의 시각적 상태 변경을 나타내는 PSP를 생성할 수 있고, 그들을 렌더 스레드(306)에 의한 후속하는 프로세싱을 위해 PSP 큐(308)에 배치할 수 있다. 이것은, 렌더 스레드(306)가 PSP 큐(308)로부터 PSP를 소비하는 것을 기다리지 않고도, 주 스레드(304)가 다른 프로세싱 작업을 수행하는 데 이용가능하게 되는 것을 가능하게 한다. 따라서, 주 스레드(304) 및 렌더 스레드(306)는, PSP를 통해 발생하는 스레드 사이의 상호작용과 함께, 독립적으로 실행할 수 있다.
적어도 몇몇 실시형태에서, 본원에서 논의되는 기술은 유저 입력이 렌더 스레드를 통해 효율적으로 프로세싱되는 것을 가능하게 한다. 예를 들면, 하기의 예시적인 시나리오를 고려한다.
도 4는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오(400)를 예시한다. 시나리오(400)는 GUI(402)를 포함하는데, GUI(402)는 디스플레이될 수 있는 다양한 그래픽 엘리먼트를 대표한다. GUI(402)는, 예를 들면, 환경(100)을 참조로 상기에서 논의된 GUI(116)의 구현예를 나타낼 수 있다. GUI(402)는 시각적 엘리먼트(402a)를 포함한다.
GUI(402)에 대한 주 스레드(404) 및 렌더 스레드(406)를 더 예시한다. 주 스레드 및 렌더 스레드에 관한 상세는 상기에서 논의되어 있다.
시나리오(400)의 중간 부분으로 진행하면, 유저가 GUI(402)에 대해 입력(408)을 제공한다. 입력(408)의 예는 터치 입력, 마우스 입력, 키보드 입력, 보이스 입력 등등을 포함한다. 적어도 몇몇 실시형태에서, 입력(408)은, 입력 디바이스 드라이버와 같은 입력 기능성으로부터 수신되는 입력 데이터를 나타낸다.
입력(408)을 수신하는 것에 응답하여, 주 스레드(404)는 입력(408)을 프로세싱하여 PSP(410)를 생성한다. PSP(410)는 입력(408)에 기초하여 GUI(402)에 대한 변경을 나타낸다. PSP(410)는, 예를 들면, GUI(402)의 다양한 조작을 나타낼 수 있다. 예를 들면, PSP(410)는, GUI(402)가 디스플레이 영역에서 스크롤될 것이라는 것, GUI(402)의 일부 상에서의 줌인 또는 줌아웃, 시각적 엘리먼트(402a)에 대한 변경 등등을 나타낼 수 있다.
시나리오(400)의 하부 부분으로 계속 진행하면, 렌더 스레드(406)는 PSP(410)를 검색하고 프로세싱하여 GUI(402)에 대한 상태 변경(410a)을 생성한다. 상태 변경(410a)은 PSP(410)에 기초한, 예를 들면, 입력(408)에 기초한 GUI(402)의 재렌더를 나타낸다. 따라서, 렌더 스레드(406)는 입력(408)에 기초하여 GUI(402)를 렌더링한다. 상기에서 언급된 바와 같이, 이것은 GUI(402)를 스크롤링하는 것, GUI(402)의 일부 상에서의 주밍(zooming), GUI(402)를 패닝(panning)하는 것, 및/또는 GUI(402)의 일부의 다른 조작을 포함할 수 있다.
따라서, 렌더 스레드(406)가 유저 입력을 설명하는 데이터를 (예를 들면, PSP 및/또는 그 밖의 것으로부터) 획득했다면, 렌더 스레드(406)는 주 스레드(404)와의 상호작용과는 무관하게 GUI(402)에 대해 입력을 적용할 수 있다. 이것은, 입력이 렌더 스레드(406)에 의해 적용되고 있는 동안 주 스레드(404)가 다른 프로세싱을 수행하는 것을 가능하게 하고, 주 스레드(404)가 다른 작업을 수행 중이더라도, 렌더 스레드(406)가 입력(408)에 기초하여 GUI(402)를 액티브하게 렌더링하는 것을 가능하게 한다.
다양한 실시형태에 따르면, 디스플레이의 시각적 영역을 설명하는 데이터(예를 들면, GUI)는 트리 구조, 또는 "디스플레이 트리"로서 표현될 수 있다. 일반적으로, 디스플레이 트리는 디스플레이의 영역의 다양한 시각적 엘리먼트를 나타내는 데이터 구조이다. 디스플레이 트리는, 예를 들면, GUI의 각각의 시각적 엘리먼트에 대응하는 상이한 노드를 포함한다. 하기에서 설명되는 바와 같이, 스레드 사이의 상호작용은 디스플레이 트리의 조작 및 버전(version)을 통해 특징지어질 수 있다. 예를 들면, 하기의 예시적인 시나리오를 고려한다.
도 5는 하나 이상의 실시형태에 따른 예시적인 구현 시나리오(500)를 예시한다. 시나리오(500)는 GUI(502)를 포함하는데, GUI(502)는 디스플레이될 수 있는 다양한 그래픽 엘리먼트를 대표한다. GUI(502)는, 예를 들면, 환경(100)을 참조로 상기에서 논의된 GUI(116)의 구현예를 나타낼 수 있다. GUI(502)는 다양한 시각적 엘리먼트, 예컨대 윈도우, 그래픽, 텍스트, 이미지 등등을 포함한다.
시나리오(500)는 GUI(502)에 대한 주 스레드(504) 및 렌더 스레드(506)를 더 포함한다. 주 스레드 및 렌더 스레드에 관한 예시적인 상세는 상기에서 논의되어 있다. 주 스레드(504)는 디스플레이 트리(508)와 관련되는데, 디스플레이 트리(508)는 GUI(502)의 데이터 표현이다. 디스플레이 트리(508)는, 예를 들면, GUI(502)의 다양한 시각적 엘리먼트를 나타내는 노드를 포함한다. 예를 들면, 디스플레이 트리(508)는 GUI(502)의 주 윈도우를 나타내는 부모 노드뿐만 아니라, GUI(502)의 각각의 시각적 엘리먼트를 각각 나타내는 다수의 자식 노드를 포함한다.
하나 이상의 실시형태에 따르면, 디스플레이 트리(508)는 GUI(502)의 다양한 프로세싱을 수행하기 위해 주 스레드(504)에 의해 활용된다. 예를 들면, GUI(502)의 시각적 엘리먼트에 대한 수정을 나타내는 다양한 이벤트가 발생할 때, 주 스레드(504)는 그에 따라 디스플레이 트리(508)를 수정한다. 따라서, 디스플레이 트리(508)는 주 스레드(504)에 의해 "소유되며", GUI(502)로 전파될 다양한 변경을 반영하도록 주 스레드(504)에 의해 업데이트가능하다.
시나리오(500)의 중간 부분으로 진행하면, PSP(510)는 본원에서 논의되는 다양한 기술에 따라 주 스레드(504)에 의해 생성된다. PSP(510)는, 예를 들면, GUI(502)의 시각적 양태를 변경시키는 다양한 이벤트에 응답하여, 주 스레드(504)에 의해 방출될 수 있다. PSP(510)는 디스플레이 트리(512)와 관련된다.
하나 이상의 실시형태에 따르면, 디스플레이 트리(512)는 특정 순간에 캡쳐된 디스플레이 트리(508)의 스냅샷(예를 들면, 사본)을 나타낸다. 예를 들면, 주 스레드(504)는 다양한 이벤트에 응답하여 디스플레이 트리(508)의 하나 이상의 노드를 수정할 수 있다. 그 다음, 주 스레드(504)는 디스플레이 트리(508)의 사본을 디스플레이 트리(512)로서 생성할 수 있다. 주 스레드(504)는, 디스플레이 트리(512)를 포함하는 및/또는 디스플레이 트리(512)에 링크되는 PSP(510)를 방출한다. 따라서, 디스플레이 트리(512)는 시간적으로 특정 순간에서의 디스플레이 트리(508)의 상태에 대응한다.
주 스레드(504)가 디스플레이 트리(512)를 갖는 PSP(510)를 방출한 이후, 주 스레드(504)는 다른 작업의 수행을 계속할 수 있다. 예를 들면, 주 스레드는 디스플레이 트리(512)에 영향을 주지 않으면서 디스플레이 트리(508)에 추가적인 수정을 가할 수 있다.
시나리오(500)는 렌더 스레드(506)에 의해 유지되는 디스플레이 트리(514)를 더 포함한다. 일반적으로, 디스플레이 트리(514)는 GUI(502)의 시각적 양태를 렌더링하기 위한 렌더 스레드(506)에 의해 활용된다. 예를 들면, 렌더 스레드(506)는 GUI(502)를 묘화하기 위해 디스플레이 트리(514)로부터 판독한다. 하나 이상의 실시형태에 따르면, 디스플레이 트리(514)는 이전의 PSP, 예를 들면, PSP(510) 이전에 수신된 PSP로부터의 디스플레이 트리에 기초하여 생성되었고/되었거나 수정되었다. 따라서, 디스플레이 트리(514)는 렌더 스레드(506)에 의해 "소유된다". 예를 들면, 적어도 몇몇 실시형태에서, 디스플레이 트리(514)는 주 스레드(504)에 의해 직접적으로 액세스되거나 수정될 수 없다.
시나리오(500)의 하부 부분으로 진행하면, 렌더 스레드(506)는 PSP(510)를 검색하고 PSP(510)와 관련되는 디스플레이 트리(512)에 기초하여 디스플레이 트리(514)를 수정한다. 디스플레이 트리(512)는, 예를 들면, 디스플레이 트리(514)의 하나 이상의 노드에 대한 변경을 나타낼 수 있다. 따라서, 변경은 디스플레이 트리(512)로부터 디스플레이 트리(514)로 전파될 수 있다. 디스플레이 트리(514)의 상태가 디스플레이 트리(512)의 상태와 동기화되면, 렌더 스레드(506)는 업데이트된 디스플레이 트리(514)에 기초하여 GUI(502) 렌더링을 계속할 수 있다.
따라서, 주 스레드(504)에 의해 디스플레이 트리(508)에 적용되는 시각적 프로세싱은 디스플레이 트리(512)를 통해 렌더 스레드(506)로 전파되는데, 그 다음, 렌더 스레드(506)는 시각적 프로세싱을 자기 자신의 디스플레이 트리(514)에 적용한다.
디스플레이 트리(518)를 포함하는 PSP(516)를 주 스레드(504)가 방출한다는 것이 시나리오(500)의 하부 부분에서 추가로 예시된다. 디스플레이 트리(512)에서와 같이, 디스플레이 트리(518)는 주 스레드(504)에 의해 생성되는 디스플레이 트리(508)의 사본이다. 디스플레이 트리(518)는, 예를 들면, 디스플레이 트리(512)가 생성되는 것에 후속하여 발생된 디스플레이 트리(508)의 상태에 대한 변경을 포함한다.
렌더 스레드(506)가 디스플레이 트리(514)의 현재의 상태로부터 GUI(502)에 대한 묘화를 종료하면, 렌더 스레드(506)는 PSP(516)를 검색할 수 있고 디스플레이 트리(514)를 디스플레이 트리(518)와 동기화시킬 수 있다. 그 다음, 렌더 스레드(506)는 업데이트된 디스플레이 트리(514)에 기초하여 GUI(502) 렌더링을 계속할 수 있다.
따라서, 시나리오(500)는, 디스플레이 영역에 대해 디스플레이 트리의 다양한 상태가 유지될 수 있다는 것을 예시한다. 예를 들면, GUI(502)를 참조하면, GUI(502)에 대해 디스플레이 트리의 적어도 세 개의 상태가 유지될 수 있다. 주 스레드(504)는 디스플레이 트리(508)를 포함하는데, 주 스레드(504)는 GUI(502)의 시각적 상태에 대한 다양한 변경을 디스플레이 트리(508)에 적용한다. GUI(502)의 시각적 상태에 대한 변경이 렌더 스레드(506)로 전파되어 디스플레이되는 것을 가능하게 하기 위해, 디스플레이 트리(508)의 상태는, 렌더 스레드(506)에 의한 소비를 위해 지속될 수 있는 중간 디스플레이 트리를 통해 캡쳐될 수 있다. 예를 들면, 디스플레이 트리(512, 518)는 디스플레이 트리(508)의 상이한 상태에서 캡쳐되는 디스플레이 트리(508)의 스냅샷을 나타낸다. 또한, 렌더 스레드(506)는 디스플레이 트리(514)를 유지하는데, 렌더 스레드(506)는 디스플레이 트리(514)를 중간 디스플레이 트리에 동기화시키고 GUI(502)에 대한 렌더링을 위해 디스플레이 트리(514)로부터 판독한다.
적어도 몇몇 실시형태에서, PSP는, 재생될 디스플레이 트리의 전체 사본을 필요로 하지 않고도, 변경을 디스플레이 트리로 전파하기 위해 활용될 수 있다. 예를 들면, 하기의 예시적인 시나리오를 고려한다.
도 6은 하나 이상의 실시형태에 따른 예시적인 구현 시나리오(600)를 예시한다. 시나리오(600)는 GUI(602)를 포함하는데, GUI(602)는 디스플레이될 수 있는 다양한 그래픽 엘리먼트를 대표한다. GUI(602)는, 예를 들면, 환경(100)을 참조로 상기에서 논의된 GUI(116)의 구현예를 나타낼 수 있다. GUI(602)는 다양한 시각적 엘리먼트, 예컨대 윈도우, 그래픽, 텍스트, 이미지 등등을 포함한다.
시나리오(600)는 GUI(602)에 대한 주 스레드(604) 및 렌더 스레드(606)를 더 포함한다. 주 스레드 및 렌더 스레드에 관한 예시적인 상세는 상기에서 논의되어 있다. 주 스레드(604)는 디스플레이 트리(608)와 관련되는데, 디스플레이 트리(608)는 GUI(602)의 데이터 표현이다.
시나리오(600)의 중간 부분으로 진행하면, PSP(610)는 본원에서 논의되는 다양한 기술에 따라 주 스레드(604)에 의해 생성된다. PSP(610)는, 예를 들면, GUI(602)의 시각적 양태를 변경시키는 다양한 이벤트에 응답하여, 주 스레드(604)에 의해 방출될 수 있다.
PSP(610)는 변경 데이터(612)를 포함하는데, 변경 데이터(612)는 발생한 디스플레이 트리(608)에 대한 변경을 나타낸다. 예를 들면, 주 스레드(604)는 다양한 이벤트에 응답하여 디스플레이 트리(608)의 하나 이상의 노드를 수정할 수 있다. 노드를 추가하는 것, 노드를 삭제하는 것, 노드를 재정렬하는 것 등등과 같은 다른 타입의 변경이 또한 이루어질 수도 있다. 그 다음, 주 스레드(604) 변경 데이터(612)를 생성할 수 있는데, 변경 데이터(612)는 디스플레이 트리(608)에 대해 이루어진 변경을 특정한다. 주 스레드(604)는, 변경 데이터(612)를 포함하고/하거나 변경 데이터(612)에 링크되는 PSP(610)를 방출한다. 다양한 실시형태에 따르면, 변경 데이터(612)는, 이전 PSP가 방출된 이후 발생한 디스플레이 트리(608)에 대한 변경에 대응한다. 따라서, PSP(612)는 디스플레이 트리(608)의 전체 사본을 포함하지 않는다.
주 스레드(604)가 디스플레이 트리(612)를 갖는 PSP(610)를 방출한 이후, 주 스레드(604)는 다른 작업의 수행을 계속할 수 있다. 예를 들면, 주 스레드는 변경 데이터(612)에 영향을 끼치지 않으면서 디스플레이 트리(608)에 대한 추가적인 수정을 가할 수 있다.
시나리오(600)는 렌더 스레드(606)에 의해 유지되는 디스플레이 트리(614)를 더 포함한다. 일반적으로, 디스플레이 트리(614)는 GUI(602)의 시각적 양태를 렌더링하기 위한 렌더 스레드(606)에 의해 활용된다. 디스플레이 트리(614)는, 예를 들면, 이전 PSP에 기초하여 생성된 디스플레이 트리(608)의 한 버전에 대응한다.
시나리오(600)의 하부 부분으로 진행하면, 렌더 스레드(606)는 PSP(610)를 검색하고 변경 데이터(612)에 기초하여 디스플레이 트리(614)를 수정한다. 따라서, 변경 데이터(612)에서 나타내어지는 변경은 디스플레이 트리(614)에 적용될 수 있다. 그 다음, 렌더 스레드(606)는 업데이트된 디스플레이 트리(614)에 기초하여 GUI(602) 렌더링을 계속할 수 있다.
다양한 실시형태에 따르면, PSP(610)는, 렌더 스레드(606)가 PSP(610)로부터 데이터 판독을 종료할 때까지 및/또는 다르게는 PSP(610) 활용을 종료할 때까지, 지속된다. 예를 들면, PSP(610)는, 렌더 스레드(606)가 PSP(610)를 릴리스할 때까지 및/또는 후속 PSP 프로세싱으로 진행할 때까지 유효하게 남아서 렌더 스레드(606)에 의해 사용가능한 디스플레이 트리(608)의 유효 상태를 나타낸다. 적어도 몇몇 실시형태에서, 렌더 스레드(606)가 PSP(610) 프로세싱을 종료한 이후, PSP(610)에 대한 메모리 어드레스 및/또는 어드레스들은 다른 목적, 예를 들면, 후속 PSP에 대해 사용되도록 릴리스될 수 있다.
따라서, 주 스레드(604)에 의해 디스플레이 트리(608)에 적용되는 시각적 프로세싱은 변경 데이터(612)를 통해 렌더 스레드(606)로 전파되는데, 그 다음, 렌더 스레드(606)는 시각적 프로세싱을 자기 자신의 디스플레이 트리(614)에 적용한다.
변경 데이터(618)를 포함하는 PSP(616)를 주 스레드(604)가 방출한다는 것이 시나리오(600)의 하부 부분에서 추가로 예시된다. 변경 데이터(618)는, 예를 들면, 주 스레드(604)가 PSP(610)를 방출하는 것에 후속하여 발생한 디스플레이 트리(608)의 상태에 대한 변경을 나타낸다.
렌더 스레드(606)가 디스플레이 트리(614)의 현재의 상태로부터 GUI(602)에 대한 묘화를 종료하면, 렌더 스레드(606)는 PSP(616)를 검색할 수 있고 변경 데이터(618)에 기초하여 디스플레이 트리(614)를 동기화할 수 있다. 그 다음, 렌더 스레드(606)는 업데이트된 디스플레이 트리(614)에 기초하여 GUI(602) 렌더링을 계속할 수 있다.
따라서, 시나리오(600)는, GUI에 대한 디스플레이 트리의 다수의 사본을 생성하지 않고도, 스레드 사이에서의 GUI의 시각적 상태에서의 변경을 공유하기 위해 PSP가 활용될 수 있다는 것을 예시한다. 또한, PSP의 수명은, PSP를 생성했던 주 스레드가 다른 프로세싱을 수행하는 동안, 디스플레이 트리의 특정 상태가 렌더 스레드에 대해 지속되는 것을 가능하게 하도록 관리될 수 있다.
상기에서 제시되는 시나리오가 렌더링 시나리오를 참조로 논의되었지만, 이것은 제한하는 것으로 의도되지는 않는다. 예를 들면, 동기화 지점은, 여러 상이한 프로세스 및/또는 작업의 일부로서, 여러 상이한 스레드 사이에서 상태 정보를 전파하기 위해 사용될 수 있다.
적어도 몇몇 실시형태에서, GUI는, 예를 들면, 경제성 또는 정확성의 이유로, 상이한 스레드 상에서 별도로 렌더링될 수 없는 또는 별도로 렌더링되어선 안되는 소정의 엘리먼트를 포함할 수 있다. 따라서, 이러한 실시형태는, 향상된 성능을 위해 렌더 스레드를 사용하는 것이 적절하다고 이들 실시형태가 간주할 때까지, 주 스레드 상에서 PSP를 프로세싱하는 것을 선택할 수 있다. 또한, 이러한 실시형태는, 리소스의 이용가능성에 따라, 렌더 스레드의 생성을 연기하거나, 렌더 스레드의 생성을 일시정지하거나, 또는 렌더 스레드의 생성을 셧다운하는 것을 선택할 수도 있다.
몇몇 예시적인 구현 시나리오를 논의하였지만, 이제, 하나 이상의 실시형태에 따른 몇몇 예시적인 프로시져의 논의를 고려한다.
예시적인 프로시져
하기의 논의는, 하나 이상의 실시형태에 따른, 상태 정보를 위한 동기화 지점에 대한 몇몇 예시적인 프로시져를 설명한다. 예시적인 프로시져는 도 1의 환경(100), 도 9의 환경(900), 및/또는 다른 적절한 환경에서 활용될 수도 있다.
도 7은 하나 이상의 실시형태에 따른 방법에서의 단계를 설명하는 흐름도이다. 그 방법은 제1 스레드와 관련되는 단계 및 제2 스레드와 관련되는 단계를 참조로 논의된다. 제1 스레드 및 제2 스레드는 여러 상이한 프로세스 및/또는 작업과 관련될 수 있다.
단계 700은 다른 스레드로 전파될 상태 변경을 결정한다. 상기에서 논의된 바와 같이, 상태 변경은, GUI의 일부와 같은, 그래픽 엘리먼트의 시각적 양태에서의 변경에 관련이 있을 수 있다. 그러나, 여러 다른 타입의 상태 변경이 여러 실시형태에 따라 전파될 수 있다. 상태 변경은, 예를 들면, 컴퓨팅 디바이스와 관련되는 여러 상이한 프로세스 및/또는 리소스에 관련이 있을 수 있다.
단계 702는 상태 변경의 표시를 포함하는 동기화 지점을 방출한다. 시각적 양태에 대한 변경을 참조로, 예를 들면, 동기화 지점은, 시각적 양태가 어떻게 변경될 것인지를 나타내는 데이터를 포함하고/하거나 식별할 수 있다. 예를 들면, 동기화 지점은, 그래픽 엘리먼트가 어떻게 렌더링되고 어떻게 디스플레이될 것인지를 정의하는, 그래픽 엘리먼트에 대한 디스플레이 트리의 하나 이상의 부분을 포함할 수 있다. 대안적으로 및/또는 추가적으로, 동기화 지점은, 상태 변경에 대한 데이터가 발견될 수 있는 곳, 예컨대 메모리 어드레스를 식별할 수 있다.
적어도 몇몇 실시형태에서, 동기화 지점을 방출하는 것은, 동기화 지점을 동기화 지점 큐에 배치하는 것을 포함할 수 있다. 예를 들면, 하나 이상의 다른 동기화 지점이 프로세싱되지 않고 남아 있으면, 동기화 지점은, 상이한 동기화 지점이 순서대로 프로세싱될 수 있도록, 동기화 지점 큐에서 다른 동기화 지점 뒤에 배치될 수 있다.
단계 704는 동기화 지점을 방출한 이후 다른 작업 수행을 계속한다. 제1 스레드는, 예를 들면, 추가적인 동기화 지점을 생성하는 것과 같은 다른 작업 실행을 계속할 수 있다. 따라서, 제1 스레드는, 프로세싱을 계속하기 위해, 동기화 지점이 제2 스레드에 의해 소비될 때까지 기다릴 필요가 없다.
단계 706은 동기화 지점을 검색한다. 제2 스레드는, 예를 들면, 동기화 지점 큐로부터 동기화 지점을 검색할 수 있다.
단계 708은 동기화 지점을 프로세싱하여 상태 변경을 결정한다. 상태 변경은, 예를 들면, GUI와 같은 그래픽 엘리먼트의 시각적 상태에서의 변경에 관련이 있을 수 있다. 그러나, 상기에서 언급된 바와 같이, 실시형태는 시각적 엘리먼트에서의 상태 변경에 제한되지 않으며, 여러 상이한 프로세스, 리소스 등등에서의 상태 변경을 참조할 수 있다.
단계 710은 상태 변경을 적용한다. 상태 변경은, 예를 들면, 동기화 지점과 관련되는 프로세스 및/또는 리소스에 적용될 수 있다. 예를 들면, 상태 변경은 그래픽 엘리먼트의 시각적 외관을 변경하도록 적용될 수 있다.
도 8은 하나 이상의 실시형태에 따른 방법에서의 단계를 설명하는 흐름도이다. 그 방법은 주 스레드와 관련되는 단계 및 렌더 스레드와 관련되는 단계를 참조로 논의된다. 주 스레드 및 렌더 스레드의 예시적인 실시형태 및 기능성은 상기에서 논의되어 있다.
단계 800은 그래픽 엘리먼트의 시각적 상태에 대한 변경을 생성한다. 예를 들면, 주 스레드는, 그래픽 엘리먼트에 대한 변경, 예컨대 GUI에 대한 시각적 변경을 야기하는 다양한 타입의 프로세싱을 수행할 수 있다. 상기에서 상세히 설명된 바와 같이, 주 스레드는 주 스레드에 의해 유지되는 디스플레이 트리에 대해 수정을 가할 수 있다.
단계 802는 시각적 상태에 대한 변경의 표시를 포함하는 동기화 지점을 방출한다. 동기화 지점은, 예를 들면, 변경을 특징으로 하는 데이터를 포함할 수 있고/있거나 데이터가 검색될 수도 있는 곳을 식별할 수 있다. 예를 들면, 동기화 지점은 주 스레드에 의해 유지되는 디스플레이 트리의 한 버전을 포함하고/하거나 식별할 수 있다.
단계 804는 동기화 지점을 방출한 이후 다른 작업 수행을 계속한다. 주 스레드는, 예를 들면, 다른 프로세싱 작업을 계속하기 이전에, 렌더 스레드가 동기화 지점을 소비하는 것을 기다릴 필요가 없다.
단계 806은 동기화 지점을 검색한다. 렌더 스레드는, 예를 들면, 동기화 지점 큐로부터 동기화 지점을 검색할 수 있다.
단계 808은 동기화 지점을 프로세싱하여 그래픽 엘리먼트의 시각적 상태에서의 변경을 결정한다. 예를 들면, 동기화 지점과 함께 포함되고/되거나 식별되는 디스플레이 트리가 검사될 수 있다.
단계 810은 시각적 상태에서의 변경을 적용하도록 그래픽 엘리먼트를 렌더링한다. 렌더 스레드는, 예를 들면, 시각적 상태에 대한 변경을 렌더 스레드에 의해 유지되는 디스플레이 트리에 적용할 수 있다. 그 다음, 렌더 스레드는 업데이트된 디스플레이 트리에 기초하여 그래픽 엘리먼트를 렌더링할 수 있다.
실시형태가 두 개의 상이한 스레드 사이의 상호작용을 참조로 본원에서 논의되었지만, 이것은 예시의 목적만을 위해 제공된다. 예를 들면, 적어도 몇몇 실시형태에서, 다수의 상이한 스레드는 동기화 지점을 생성할 수 있고 특정 스레드에 의한 프로세싱을 위해 동기화 지점을 방출할 수 있다. GUI 렌더링 시나리오에서, 예를 들면, 다수의 상이한 스레드는, GUI의 시각적 양태에 대한 변경을 특정하는 동기화 지점을 생성할 수 있다. 동기화 지점은, 렌더 스레드에 의한 소비를 위해, 상이한 스레드에 의해 방출될 수 있다.
몇몇 예시적인 프로시져를 논의하였지만, 이제, 하나 이상의 실시형태에 따른, 예시적인 시스템 및 디바이스의 논의를 고려한다.
예시적인 시스템 및 디바이스
도 9는 본원에서 설명되는 다양한 기술을 구현할 수도 있는 하나 이상의 컴퓨팅 시스템 및/또는 디바이스를 대표하는 예시적인 컴퓨팅 디바이스(902)를 포함하는 예시적인 시스템을 900에서 일반적으로 예시한다. 예를 들면, 도 1을 참조로 상기에서 논의되는 컴퓨팅 디바이스(102)는 컴퓨팅 디바이스(902)로서 구체화될 수 있다. 컴퓨팅 디바이스(902)는, 예를 들면, 서비스 공급자의 서버, 클라이언트와 관련되는 디바이스(예를 들면, 클라이언트 디바이스), 온칩(on-chip) 시스템, 및/또는 임의의 다른 적절한 컴퓨팅 디바이스 또는 컴퓨팅 시스템일 수도 있다.
예시된 바와 같은 예시적인 컴퓨팅 디바이스(902)는, 서로 통신적으로 커플링되는 프로세싱 시스템(904), 하나 이상의 컴퓨터 판독가능 매체(906), 및 하나 이상의 입출력(Input/Output; I/O) 인터페이스(908)를 포함한다. 도시되지는 않았지만, 컴퓨팅 디바이스(902)는, 다양한 컴포넌트를 서로 커플링하는 시스템 버스 또는 다른 데이터 및 커맨드 전송 시스템을 더 포함할 수도 있다. 시스템 버스는, 메모리 버스 또는 메모리 컨트롤러, 주변장치 버스, 범용 직렬 버스, 및/또는 다양한 버스 아키텍쳐 중 임의의 것을 활용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조 중 임의의 하나 또는 그 조합을 포함할 수 있다. 제어 및 데이터 라인과 같은 다양한 다른 예도 또한 기대된다.
프로세싱 시스템(904)은 하드웨어를 사용하여 하나 이상의 동작을 수행하는 기능성을 대표한다. 따라서, 프로세싱 시스템(904)은, 프로세서, 기능적 블록 등등으로서 구성될 수도 있는 하드웨어 엘리먼트(910)를 포함하는 것으로 예시된다. 이것은 하드웨어의 구현예를, 주문형 반도체(application specific integrated circuit) 또는 하나 이상의 반도체를 사용하여 형성되는 다른 로직 디바이스로서, 포함할 수도 있다. 하드웨어 엘리먼트(910)는, 하드웨어 엘리먼트(910)를 형성하는 재료 또는 내부에서 활용되는 프로세싱 메커니즘에 의해 제한되지 않는다. 예를 들면, 프로세서는 반도체(들) 및/또는 트랜지스터(예를 들면, 전자 집적 회로(integrated circuit; IC))로 구성될 수도 있다. 이러한 맥락에서, 프로세서 실행가능 명령어는 전자적으로 실행가능한 명령어일 수도 있다.
컴퓨터 판독가능 매체(906)는 메모리/스토리지(912)를 포함하는 것으로 예시된다. 메모리/스토리지(912)는 하나 이상의 컴퓨터 판독가능 매체와 관련되는 메모리/스토리지 용량을 나타낸다. 메모리/스토리지(912)는 휘발성 매체(예컨대 랜덤 액세스 메모리(random access memory; RAM)) 및/또는 불휘발성 매체(예컨대 리드 온리 메모리(read only memory; ROM), 플래시 메모리, 광학 디스크, 자기 디스크 등등)를 포함할 수도 있다. 메모리/스토리지(912)는 고정식 매체(예를 들면, RAM, ROM, 고정식 하드 드라이브 등등)뿐만 아니라 착탈식(removable) 매체(예를 들면, 플래시 메모리, 착탈식 하드 드라이브, 광학 디스크 등등)를 포함할 수도 있다. 컴퓨터 판독가능 매체(906)는 하기에서 더 설명되는 바와 같이 다양한 다른 방식으로 구성될 수도 있다.
입/출력 인터페이스(들)(908)는, 유저가 커맨드 및 정보를 컴퓨팅 디바이스(902)에 입력하는 것을 허용하는, 그리고 정보가 다양한 입/출력 디바이스를 사용하여 유저 및/또는 다른 컴포넌트 또는 디바이스로 제공되는 것을 또한 허용하는 기능성을 대표한다. 입력 디바이스의 예는 키보드, 커서 제어 디바이스(예를 들면, 마우스), 마이크(예를 들면, 보이스 인식 및/또는 음성 입력(spoken input)), 스캐너, 터치 기능성(예를 들면, 물리적 접촉을 검출하도록 구성되는 용량성 또는 다른 센서), 카메라(예를 들면, 카메라는 제스쳐처럼 터치를 수반하지 않는 움직임을 검출하기 위해, 가시(visible) 또는 비가시(non-visible) 파장 예컨대 적외선 주파수를 활용할 수도 있음) 등등을 포함한다. 출력 디바이스의 예는 디스플레이 디바이스(예를 들면, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드, 촉각 반응 디바이스 등등을 포함한다. 따라서, 컴퓨팅 디바이스(902)는 유저 상호작용을 지원하기 위해 하기에서 더 설명되는 바와 같이 다양한 방식으로 구성될 수도 있다.
소프트웨어, 하드웨어 엘리먼트, 또는 프로그램 모듈의 일반적인 맥락에서, 다양한 기술이 본원에서 설명될 수도 있다. 일반적으로, 이러한 모듈은, 특정 작업을 수행하는 또는 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 엘리먼트, 컴포넌트, 데이터 구조 등등을 포함한다. 본원에서 사용되는 바와 같은 용어 "모듈", "기능성", 및 "컴포넌트"는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 일반적으로 나타낸다. 본원에서 설명되는 기술의 특징은 플랫폼 독립적인데, 그 기술이 다양한 프로세서를 구비하는 다양한 상업적 컴퓨팅 플랫폼 상에서 구현될 수도 있다는 것을 의미한다.
설명된 모듈 및 기술의 구현예는 몇몇 형태의 컴퓨터 판독가능 매체 상에 저장되거나 또는 몇몇 형태의 컴퓨터 판독가능 매체를 통해 전송될 수도 있다. 컴퓨터 판독가능 매체는, 컴퓨팅 디바이스(902)에 의해 액세스될 수도 있는 다양한 매체를 포함할 수도 있다. 비제한적인 예로서, 컴퓨터 판독가능 매체는 "컴퓨터 판독가능 저장 매체" 및 "컴퓨터 판독가능 신호 매체"를 포함할 수도 있다.
"컴퓨터 판독가능 저장 매체"는, 단순한 신호 전송, 반송파, 또는 신호 그 자체와는 대조적으로, 정보의 영구적인 저장을 가능하게 하는 매체 및/또는 디바이스를 지칭할 수도 있다. 따라서, 컴퓨터 판독가능 저장 매체는 신호 그 자체를 포함하지 않는다. 컴퓨터 판독가능 저장 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 로직 엘리먼트/회로, 또는 다른 데이터와 같은 정보의 저장에 적합한 방법 또는 기술로 구현되는 휘발성 및 불휘발성의 착탈식 및 비착탈식 매체 및/또는 스토리지 디바이스와 같은 하드웨어를 포함한다. 컴퓨터 판독가능 저장 매체의 예는, RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크(digital versatile disks; DVD) 또는 다른 광학 스토리지, 하드 디스크, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스, 또는 다른 스토리지 디바이스, 유형의 매체, 또는 소망의 정보를 저장하기에 적합하며 컴퓨터에 의해 액세스될 수도 있는 제조 물품을 포함할 수도 있지만, 이들에 제한되는 것은 아니다.
"컴퓨터 판독가능 신호 매체"는, 예컨대 네트워크를 통해 명령어를 컴퓨팅 디바이스(902)의 하드웨어로 송신하도록 구성되는 신호 보유 매체(signal-bearing medium)를 지칭할 수 있다. 신호 매체는 통상적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 변조된 데이터 신호, 예컨대 반송파, 데이터 신호, 또는 다른 전송 메커니즘에서의 다른 데이터를 구체화할 수도 있다. 신호 매체는 임의의 정보 전달 매체를 또한 포함한다. 용어 "변조된 데이터 신호"는, 자신의 특성 세트 중 하나 이상이 신호에 정보를 인코딩하는 것과 같은 방식으로 설정되거나 변경되는 신호를 의미한다. 비제한적인 예로서, 통신 매체는 유선 매체 예컨대 유선 네트워크 또는 직결 접속(direct-wired connection), 및 무선 매체 예컨대 음향, 무선 주파수(radio frequency; RF), 적외선, 및 다른 무선 매체를 포함한다.
앞서 설명된 바와 같이, 하드웨어 엘리먼트(910) 및 컴퓨터 판독가능 매체(906)는, 본원에서 설명되는 기술의 적어도 몇몇 양태를 구현하기 위해 몇몇 실시형태에서 활용될 수도 있는 하드웨어 형태로 구현되는 명령어, 모듈, 프로그래밍가능 디바이스 로직 및/또는 고정식 디바이스 로직을 대표한다. 하드웨어 엘리먼트는 집적 회로 또는 온칩 시스템, 주문형 반도체(application-specific integrated circuit; ASIC), 필드 프로그래머블 게이트 어레이(field-programmable gate array; FPGA), 복합 프로그래머블 로직 디바이스(complex programmable logic device; CPLD), 및 실리콘 또는 다른 하드웨어 디바이스에서의 다른 구현예의 컴포넌트를 포함할 수도 있다. 이 맥락에서, 하드웨어 엘리먼트는, 하드웨어 엘리먼트뿐만 아니라 실행을 위한 명령어를 저장하기 위해 활용되는 하드웨어 디바이스, 예를 들면, 앞서 설명된 컴퓨터 판독가능 저장 매체에 의해 구체화되는 명령어, 모듈, 및/또는 로직에 의해 정의되는 프로그램 작업을 수행하는 프로세싱 디바이스로서 동작할 수도 있다.
본원에서 설명되는 다양한 기술 및 모듈을 구현하기 위해, 상기의 조합이 또한 활용될 수도 있다. 따라서, 소프트웨어, 하드웨어, 또는 프로그램 모듈 및 다른 프로그램 모듈은, 몇몇 형태의 컴퓨터 판독가능 저장 매체 상에서 및/또는 하나 이상의 하드웨어 엘리먼트(910)에 의해 구체화되는 하나 이상의 명령어 및/또는 로직으로서 구현될 수도 있다. 컴퓨팅 디바이스(902)는 소프트웨어 및/또는 하드웨어 모듈에 대응하는 특정 명령어 및/또는 기능을 구현하도록 구성될 수도 있다. 따라서, 소프트웨어로서 컴퓨팅 디바이스(902)에 의해 실행가능한 모듈의 구현예는, 예를 들면, 프로세싱 시스템의 하드웨어 엘리먼트(910) 및/또는 컴퓨터 판독가능 저장 매체의 사용을 통해, 적어도 부분적으로 하드웨어로 달성될 수도 있다. 명령어 및/또는 기능은 본원에서 설명되는 기술, 모듈, 및 예를 구현하도록 하나 이상의 제조 물품(예를 들면, 하나 이상의 컴퓨팅 디바이스(902) 및/또는 프로세싱 시스템(904))에 의해 실행가능/동작가능할 수도 있다.
도 9에서 또한 예시되는 바와 같이, 예시적인 시스템(900)은, 퍼스널 컴퓨터(personal computer; PC), 텔레비전 디바이스, 및/또는 모바일 디바이스 상에서 애플리케이션을 실행하고 있을 때 원활한 유저 경험을 위한 유비쿼터스 환경(ubiquitous environment)을 가능하게 한다. 서비스 및 애플리케이션은, 애플리케이션을 활용하는 동안, 비디오 게임을 플레이하는 동안, 비디오를 시청하는 동안 등등의 동안, 한 디바이스에서 다음의 디바이스로 전이할 때 공통의 유저 경험을 위해 모든 세 개의 환경에서 실질적으로 유사하게 실행한다.
예시적인 시스템(900)에서, 다수의 디바이스는 중앙 컴퓨팅 디바이스를 통해 상호접속된다. 중앙 컴퓨팅 디바이스는 다수의 디바이스에 로컬할 수도 있거나 또는 다수의 디바이스로부터 원격에 위치될 수도 있다. 하나 이상의 실시형태에서, 중앙 컴퓨팅 디바이스는, 네트워크, 인터넷, 또는 다른 데이터 통신 링크를 통해 다수의 디바이스에 연결되는 하나 이상의 서버 컴퓨터의 클라우드일 수도 있다.
하나 이상의 실시형태에서, 이 상호접속 아키텍쳐(interconnection architecture)는 다수의 디바이스 전체에 걸쳐 전달될 기능성이, 다수의 디바이스의 유저에게 공통의 그리고 원활한 경험을 제공하는 것을 가능하게 한다. 다수의 디바이스의 각각은 상이한 물리적 요건 및 성능을 구비할 수도 있으며, 중앙 컴퓨팅 디바이스는, 디바이스에 맞춤되면서도(tailored) 여전히 모든 디바이스에 대해 공통인 경험의 디바이스로의 전달을 가능하게 하는 플랫폼을 사용한다. 하나 이상의 실시형태에서, 목표 디바이스의 클래스가 생성되고 경험이 디바이스의 제너릭 클래스(generic class)에 맞춤된다. 디바이스의 클래스는 디바이스의 물리적 피쳐, 사용의 타입, 또는 다른 공통의 특성에 의해 정의될 수도 있다.
다양한 구현예에서, 컴퓨팅 디바이스(902)는, 예컨대 컴퓨터(914), 모바일(916), 및 텔레비전(918) 용도에 대해, 여러 상이한 구성을 취할 수도 있다. 이들 구성의 각각은, 일반적으로 상이한 구조 및 성능을 가질 수도 있는 디바이스를 포함하며, 따라서 컴퓨팅 디바이스(902)는 상이한 디바이스 클래스 중 하나 이상에 따라 구성될 수도 있다. 예를 들면, 컴퓨팅 디바이스(902)는, 퍼스널 컴퓨터, 데스크탑 컴퓨터, 멀티스크린 컴퓨터, 랩탑 컴퓨터, 넷북 등등을 포함하는 디바이스의 컴퓨터(914) 클래스로서 구현될 수도 있다.
컴퓨팅 디바이스(902)는, 모바일 디바이스, 예컨대 모바일 폰, 휴대형 음악 플레이어, 휴대형 게임용 디바이스, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등등을 포함하는 디바이스의 모바일(916) 클래스로서 또한 구현될 수도 있다. 컴퓨팅 디바이스(902)는, 일상적인(casual) 시청 환경에서 일반적으로 더 큰 스크린을 갖는 또는 더 큰 스크린에 연결되는 디바이스를 포함하는 디바이스의 텔레비전(918) 클래스로서 또한 구현될 수도 있다. 이들 디바이스는 텔레비전, 셋탑 박스, 게임용 콘솔 등등을 포함한다.
본원에서 설명되는 기술은 컴퓨팅 디바이스(902)의 이들 다양한 구성에 의해 지원될 수도 있으며 본원에서 설명되는 기술의 특정 예에 제한되지 않는다. 예를 들면, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)을 참조로 논의된 기능성은, 모두 또는 부분적으로 분산형 시스템의 사용을 통해, 예컨대 하기에서 설명되는 바와 같이 플랫폼(922)을 통한 "클라우드"(920)를 통해 구현될 수도 있다.
클라우드(920)는 리소스(924)에 대한 플랫폼(920)을 포함하고/하거나 플랫폼(922)을 대표한다. 플랫폼(922)은 클라우드(920)의 하드웨어(예를 들면, 서버) 및 소프트웨어 리소스의 기저의(underlying) 기능성을 추상화한다. 리소스(924)는, 컴퓨팅 디바이스(902)로부터 원격인 서버 상에서 컴퓨터 프로세싱이 실행되고 있는 동안 활용될 수 있는 애플리케이션 및/또는 데이터를 포함할 수도 있다. 리소스(924)는 인터넷을 통해 및/또는 가입자 네트워크, 예컨대 셀룰러 또는 와이파이 네트워크를 통해 제공되는 서비스를 또한 포함할 수 있다.
플랫폼(922)은 컴퓨팅 디바이스(902)를 다른 컴퓨팅 디바이스와 연결하는 리소스 및 기능을 추상화할 수도 있다. 플랫폼(922)은, 플랫폼(922)을 통해 구현되는 리소스(924)에 대한 조우되는 요구에 대해 대응하는 레벨의 스케일을 제공하기 위해, 리소스의 스케일링을 추상화하도록 또한 기능할 수도 있다. 따라서, 상호접속된 디바이스 실시형태에서, 본원에서 설명되는 기능성의 구현예는 시스템(900) 전체에 걸쳐 분산될 수도 있다. 예를 들면, 기능성은 컴퓨팅 디바이스(902) 상에서뿐만 아니라 클라우드(920)의 기능성을 추상화하는 플랫폼(922)을 통해서도 부분적으로 구현될 수도 있다.
본원에서 논의된 기술을 수행하기 위해 구현될 수 있는 다수의 방법이 본원에서 논의되고 있다. 방법의 양태는 하드웨어, 펌웨어, 또는 소프트웨어, 또는 이들의 조합으로 구현될 수도 있다. 방법은 하나 이상의 디바이스에 의해 수행되는 동작을 특정하는 단계의 세트로서 도시되며, 각각의 블록에 의한 동작을 수행하기 위한 도시된 순서로 반드시 제한되지는 않는다. 또한, 특정 방법과 관련하여 도시된 동작은 하나 이상의 구현예에 따른 상이한 방법의 동작과 결합되고/되거나 상호변경될 수도 있다. 방법의 양태는 환경(100)을 참조로 상기에서 논의된 다양한 엔티티 사이의 상호작용을 통해 구현될 수 있다.
결론
상태 정보를 위한 동기화 지점에 대한 기술이 설명된다. 비록 본 발명이 구조적 특징 및/또는 방법론적 액트(act)에 고유한 언어로 설명되었지만, 첨부된 청구범위에서 정의되는 실시형태는 설명되는 특정한 특징 또는 액트에 반드시 제한되지는 않는다는 것이 이해되어야 한다. 대신, 특정한 특징 및/또는 액트는 청구된 실시형태를 구현하는 예시적인 형태로서 개시된다.

Claims (10)

  1. 시스템에 있어서,
    적어도 하나의 프로세서; 및
    명령어가 저장된 하나 이상의 컴퓨터 판독가능 저장 매체
    를 포함하고,
    상기 명령어는, 상기 적어도 하나의 프로세서에 의한 실행에 응답하여, 상기 시스템으로 하여금,
    그래픽 엘리먼트의 시각적 상태에 대한 변경을 생성하기 위해, 또한 상기 시각적 상태에 대한 상기 변경의 표시를 포함하고, 적어도 제2 스레드(thread)가 상기 그래픽 엘리먼트의 상기 시각적 상태를 업데이트하기 위해 동기화 지점을 검색하여(retrieve) 프로세싱할 때까지 유효 상태를 지속하는 상기 동기화 지점을 방출하기 위해, 제1 스레드를 실행하는 것; 및
    상기 동기화 지점을 프로세싱하여 상기 시각적 상태에 대한 상기 변경을 결정하기 위해, 그리고 상기 변경을 상기 시각적 상태에 적용하도록 상기 그래픽 엘리먼트를 렌더링하기 위해, 상기 제2 스레드를 실행하는 것
    을 포함하는 동작을 수행하게 하는 것인, 시스템.
  2. 제1항에 있어서,
    상기 제1 스레드를 실행하는 것은, 제1 프로세서 코어를 통해 상기 제1 스레드를 실행하는 것을 포함하고, 상기 제2 스레드를 실행하는 것은, 제2 프로세서 코어를 통해 상기 제2 스레드를 실행하는 것을 포함하는 것인, 시스템.
  3. 제1항에 있어서,
    상기 그래픽 엘리먼트는 웹 플랫폼 애플리케이션에 의해 생성되는 웹 다큐먼트의 적어도 일부를 포함하는 것인, 시스템.
  4. 제1항에 있어서,
    상기 제1 스레드를 실행하는 것은, 상기 동기화 지점(synchronization point)을 동기화 지점 큐(queue)에 추가하는 것을 포함하고, 상기 제2 스레드를 실행하는 것은, 상기 동기화 지점을 프로세싱하기 이전에 상기 동기화 지점 큐로부터 상기 동기화 지점을 검색하는 것을 포함하는 것인, 시스템.
  5. 제1항에 있어서,
    상기 제1 스레드를 실행하는 것은, 상기 시각적 상태에 대한 상기 변경을 반영하기 위해 상기 그래픽 엘리먼트에 대한, 상기 제1 스레드에 의해 유지되는 디스플레이 트리(display tree)의 버전을 수정하는 것, 및 상기 디스플레이 트리의 상기 수정된 버전의 사본을 상기 동기화 지점과 관련시키는 것을 포함하고;
    상기 제2 스레드를 실행하는 것은, 상기 디스플레이 트리의 상기 수정된 버전의 상기 사본으로부터의 상태 정보를, 상기 제2 스레드에 의해 유지되는 상기 디스플레이 트리의 버전으로 전파하는 것, 및 상기 제2 스레드에 의해 유지되는 상기 디스플레이 트리의 상기 버전에 기초하여 상기 그래픽 엘리먼트를 렌더링하는 것을 포함하는 것인, 시스템.
  6. 명령어가 저장된 하나 이상의 컴퓨터 판독가능 저장 매체에 있어서,
    상기 명령어는, 컴퓨팅 디바이스에 의한 실행에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    그래픽 유저 인터페이스(graphical user interface; GUI)에 대한 입력을 수신하는 것;
    유저 입력에 기초하여 상기 GUI의 시각적 상태에 대한 하나 이상의 변경을 주 스레드를 통해 생성하고, 상기 GUI의 상기 시각적 상태에 대한 상기 하나 이상의 변경의 표시를 포함하는 그리고 상기 주 스레드가 다른 프로세싱을 수행하는 동안 또한, 적어도, 상기 하나 이상의 변경에 기초하여 상기 GUI의 상기 시각적 상태를 렌더 스레드(render thread)가 업데이트할 때까지 유효 상태로 남아 있는 동기화 지점을 방출하는 것; 및
    상기 시각적 상태에 대한 상기 하나 이상의 변경을 결정하고, 상기 시각적 상태에 대한 상기 하나 이상의 변경에 기초하여 상기 GUI를 렌더링하기 위해, 상기 렌더 스레드를 통해 상기 동기화 지점을 프로세싱하는 것
    을 포함하는 동작을 수행하게 하는 것인, 하나 이상의 컴퓨터 판독가능 저장 매체.
  7. 제6항에 있어서,
    상기 입력은 상기 GUI의 적어도 일부의 스크롤링 또는 주밍(zooming) 중 하나 이상을 수행하기 위한, 유저로부터의 터치 입력을 포함하는 것인, 하나 이상의 컴퓨터 판독가능 저장 매체.
  8. 컴퓨터 구현 방법에 있어서,
    그래픽 유저 인터페이스(GUI)의 시각적 상태에 대한 하나 이상의 변경을 생성하기 위해, 그리고 상기 GUI를 위한 디스플레이 트리에 대한 변경으로서 표현되는 상기 GUI의 상기 시각적 상태에 대한 상기 하나 이상의 변경의 표시를 포함하는 동기화 지점 - 상기 동기화 지점은, 적어도, 다른 스레드(thread)가 상기 동기화 지점을 프로세싱할 때까지 유효 상태로 남아 있음 - 을 방출하기 위해, 제1 프로세서 코어를 통해 제1 스레드를 실행하는 단계; 및
    상기 동기화 지점을 프로세싱하여 상기 GUI의 상기 시각적 상태에 대한 상기 하나 이상의 변경을 결정하기 위해, 상기 디스플레이 트리에 상기 변경을 적용하여 상기 GUI를 위한 업데이트된 디스플레이를 생성하기 위해, 그리고 상기 업데이트된 디스플레이 트리에 기초하여 상기 GUI를 렌더링하기 위해, 제2 프로세서 코어를 통해 제2 스레드를 실행하는 단계를 포함하는, 컴퓨터 구현 방법.
  9. 제8항에 있어서,
    상기 GUI는 웹 다큐먼트를 포함하고, 상기 제1 스레드 및 상기 제2 스레드는, 상기 웹 다큐먼트를 생성하는 웹 플랫폼 애플리케이션을 위한 그래픽 모듈에 의해 관리되는 것인, 컴퓨터 구현 방법.
  10. 제8항에 있어서,
    상기 제1 스레드를 실행하는 단계는, 상기 시각적 상태에 대한 상기 변경을 반영하기 위해 상기 GUI를 위한, 상기 제1 스레드에 의해 유지되는 상기 디스플레이 트리의 버전을 수정하는 단계, 및 상기 디스플레이 트리의 상기 수정된 버전의 사본을 상기 동기화 지점과 관련시키는 단계를 포함하고;
    상기 제2 스레드를 실행하는 단계는, 상기 디스플레이 트리의 상기 수정된 버전의 상기 사본으로부터의 상태 정보를 상기 제2 스레드에 의해 유지되는 상기 디스플레이 트리의 버전으로 전파하는 단계, 및 상기 제2 스레드에 의해 유지되는 상기 디스플레이 트리의 상기 버전에 기초하여 상기 GUI를 렌더링하는 단계를 포함하는 것인, 컴퓨터 구현 방법.
KR1020167001549A 2013-06-19 2013-09-20 상태 정보를 위한 동기화 지점 KR102040359B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/921,727 2013-06-19
US13/921,727 US9430808B2 (en) 2013-06-19 2013-06-19 Synchronization points for state information
PCT/US2013/061060 WO2014204502A1 (en) 2013-06-19 2013-09-20 Synchronization points for state information

Publications (2)

Publication Number Publication Date
KR20160022362A true KR20160022362A (ko) 2016-02-29
KR102040359B1 KR102040359B1 (ko) 2019-11-04

Family

ID=49354895

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167001549A KR102040359B1 (ko) 2013-06-19 2013-09-20 상태 정보를 위한 동기화 지점

Country Status (5)

Country Link
US (1) US9430808B2 (ko)
EP (1) EP3011451A1 (ko)
KR (1) KR102040359B1 (ko)
CN (1) CN105359104B (ko)
WO (1) WO2014204502A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9633408B2 (en) 2013-06-14 2017-04-25 Microsoft Technology Licensing, Llc Coalescing graphics operations
US10466974B2 (en) * 2015-04-14 2019-11-05 Microsoft Technology Licensing, Llc Independent expression animations
US10430208B2 (en) * 2017-05-02 2019-10-01 Huawei Technologies Co., Ltd. Multi-version asynchronous dynamic software update system and method for applications with multiple threads
US10866963B2 (en) 2017-12-28 2020-12-15 Dropbox, Inc. File system authentication
US11778045B2 (en) 2021-07-12 2023-10-03 Red Hat, Inc. Communication system for micro-frontends of a web application
US20240127520A1 (en) * 2022-10-14 2024-04-18 VRChat Inc. Dynamic interactions between avatar attachments

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050278059A1 (en) * 2004-02-25 2005-12-15 Osborn Andrew R Method of programming a processing system
US7426735B2 (en) * 2000-10-17 2008-09-16 Microsoft Corporation Threading and communication architecture for a graphical user interface
US20110298787A1 (en) * 2010-06-02 2011-12-08 Daniel Feies Layer composition, rendering, and animation using multiple execution threads
US20120174121A1 (en) * 2011-01-05 2012-07-05 Research In Motion Limited Processing user input events in a web browser
EP2584463A2 (en) * 2011-10-18 2013-04-24 Research In Motion Limited Method of rendering a user interface

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3417392B2 (ja) * 2000-09-08 2003-06-16 ヤマハ株式会社 同期制御装置
US7228500B2 (en) 2003-06-13 2007-06-05 Microsoft Corporation Web page rendering priority mechanism
US20070139430A1 (en) 2005-12-21 2007-06-21 Microsoft Corporation Rendering "gadgets" with a browser
US8645973B2 (en) 2006-09-22 2014-02-04 Oracle International Corporation Mobile applications
US8020089B1 (en) 2006-10-23 2011-09-13 Adobe Systems Incorporated Rendering hypertext markup language content
US8260864B2 (en) 2008-02-13 2012-09-04 Microsoft Corporation Push mechanism for efficiently sending aggregated data items to client
CN102224476B (zh) * 2008-10-14 2017-08-01 奥布隆工业有限公司 多进程交互系统和方法
US20100306696A1 (en) 2008-11-26 2010-12-02 Lila Aps (Ahead.) Dynamic network browser
US8654134B2 (en) 2008-12-08 2014-02-18 Microsoft Corporation Command remoting
US8325177B2 (en) 2008-12-29 2012-12-04 Microsoft Corporation Leveraging graphics processors to optimize rendering 2-D objects
US8751955B2 (en) * 2009-03-28 2014-06-10 International Business Machines Corporation Scrollbar user interface for multitouch devices
US8527646B2 (en) 2009-04-14 2013-09-03 Avid Technology Canada Corp. Rendering in a multi-user video editing system
US20100287553A1 (en) 2009-05-05 2010-11-11 Sap Ag System, method, and software for controlled interruption of batch job processing
US9245371B2 (en) * 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US20120159363A1 (en) 2010-12-16 2012-06-21 Microsoft Corporation Z-order bands
US9104475B2 (en) 2011-04-07 2015-08-11 Qualcomm Innovation Center, Inc. Methods and apparatus for managing operations of a web browser by predicting time period of subsequent script execution activity
US9442780B2 (en) 2011-07-19 2016-09-13 Qualcomm Incorporated Synchronization of shader operation
US8872838B2 (en) * 2011-09-09 2014-10-28 Microsoft Corporation Primitive composition
US9665353B2 (en) 2012-11-08 2017-05-30 Facebook, Inc. Progressive rendering of data sets
US20140157108A1 (en) 2012-11-30 2014-06-05 Meteor Development Group, Inc. Live-updating web page generation
US9633408B2 (en) * 2013-06-14 2017-04-25 Microsoft Technology Licensing, Llc Coalescing graphics operations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7426735B2 (en) * 2000-10-17 2008-09-16 Microsoft Corporation Threading and communication architecture for a graphical user interface
US20050278059A1 (en) * 2004-02-25 2005-12-15 Osborn Andrew R Method of programming a processing system
US20110298787A1 (en) * 2010-06-02 2011-12-08 Daniel Feies Layer composition, rendering, and animation using multiple execution threads
US20120174121A1 (en) * 2011-01-05 2012-07-05 Research In Motion Limited Processing user input events in a web browser
EP2584463A2 (en) * 2011-10-18 2013-04-24 Research In Motion Limited Method of rendering a user interface

Also Published As

Publication number Publication date
WO2014204502A1 (en) 2014-12-24
KR102040359B1 (ko) 2019-11-04
US20140375657A1 (en) 2014-12-25
EP3011451A1 (en) 2016-04-27
CN105359104B (zh) 2019-05-31
US9430808B2 (en) 2016-08-30
CN105359104A (zh) 2016-02-24

Similar Documents

Publication Publication Date Title
JP6997253B2 (ja) ウェブページレンダリング方法、装置、電子設備、記憶媒体及びプログラム
WO2020119485A1 (zh) 一种页面显示方法、装置、设备及存储介质
KR102108583B1 (ko) 인스턴스화가능한 제스처 객체
US10824403B2 (en) Application builder with automated data objects creation
US10545749B2 (en) System for cloud computing using web components
US20160092048A1 (en) Display of hierarchical datasets using high-water mark scrolling
KR102040359B1 (ko) 상태 정보를 위한 동기화 지점
US20150220496A1 (en) Dynamic sprite based theme switching
US20200125336A1 (en) System and method for enhancing component based development models with auto-wiring
US10712913B2 (en) Event-based architecture for expand-collapse operations
US20190080017A1 (en) Method, system, and device that invokes a web engine
US20230385363A1 (en) Web site preview generation based on web site type
KR102121641B1 (ko) 그래픽 동작들 통합
EP3005083B1 (en) Input object configured to route input for a visual element to a graphic framework
US20120216132A1 (en) Embedding User Selected Content In A Web Browser Display
US11983483B2 (en) Web site preview generation with action control
US20160147741A1 (en) Techniques for providing a user interface incorporating sign language
CN112130811A (zh) 数据处理方法与装置、存储介质、电子设备
US11874890B2 (en) Multi-entry point navigation for user interfaces
CN116204440A (zh) 一种表单调试方法、装置及设备

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant