KR20160019526A - 그래픽 동작들 통합 - Google Patents

그래픽 동작들 통합 Download PDF

Info

Publication number
KR20160019526A
KR20160019526A KR1020167000784A KR20167000784A KR20160019526A KR 20160019526 A KR20160019526 A KR 20160019526A KR 1020167000784 A KR1020167000784 A KR 1020167000784A KR 20167000784 A KR20167000784 A KR 20167000784A KR 20160019526 A KR20160019526 A KR 20160019526A
Authority
KR
South Korea
Prior art keywords
thread
graphical
gui
operations
patch
Prior art date
Application number
KR1020167000784A
Other languages
English (en)
Other versions
KR102121641B1 (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 KR20160019526A publication Critical patent/KR20160019526A/ko
Application granted granted Critical
Publication of KR102121641B1 publication Critical patent/KR102121641B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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

Abstract

그래픽 동작들을 통합하기 위한 기술이 기재된다. 적어도 일부 실시예에서, 복수의 그래픽 동작들이 그래픽 사용자 인터페이스(GUI)와 같은 그래픽 요소에 적용되도록 발생될 수 있다. 그래픽 동작들은, 프로세싱 및 렌더링될 수 있는 단일 렌더링가능한 그래픽 동작으로 통합될 수 있다.

Description

그래픽 동작들 통합{COALESCING GRAPHICS OPERATIONS}
본 발명은 그래픽 동작들(graphics operations)을 통합(coalescing)하는 것에 관한 것이다.
오늘날의 컴퓨팅 디바이스는 계속 증가하는 양의 프로세싱 전력을 갖는다. 예를 들어, 통상의 디바이스는, 각각이 데이터 프로세싱을 수행할 수 있는 복수의 프로세싱 코어를 구비한 중앙 프로세싱 유닛(CPU; central processing unit)을 갖는다. 또한, 개별 프로세서 상에서 이용 가능한 코어의 수가 계속해서 증가한다. 멀티코어(multi-core) 프로세서의 보급으로 CPU 상에서 복수의 프로세싱 태스크(task)들을 병렬로 수행할 수 있는 능력을 가져다 준다. 예를 들어, 각각이 특정 프로세싱 태스크를 처리하는 복수의 프로세싱 쓰레드(thread)들이 프로세서의 각자의 코어 상에서 동시에 실행될 수 있다. 따라서, 복수의 태스크들이 완료될 수 있는 속도가 이전의 단일 코어 프로세서 이상으로 증가된다.
이용가능한 프로세싱 전력이 증가하였지만, 많은 컴퓨팅 프로세스들은 여전히 프로세싱 태스크들을 스케줄링 및/또는 관리하기 위해 직렬 프로세싱 접근을 이용한다. 예를 들어, 일부 애플리케이션들은 특정 프로세싱 태스크들을 병렬화(parallelize)하도록 구성되지 않으며, 따라서 멀티코어 프로세서의 병렬 프로세싱 능력을 레버리징(leverage)하지 못한다. 프로세싱 태스크들을 병렬화하지 않음으로써, 이들 프로세스들은 병렬 프로세싱으로부터의 결과인 성능 이익을 받지 못한다.
이 요약은 상세한 설명에서 아래에 더 기재되는 개념의 선택을 단순화된 형태로 소개하고자 제공된다. 이 요약은 청구하는 주제의 핵심 특징 또는 필수 특징을 나타내는 것도 아니며, 청구하는 주제의 범위를 결정하는 데 돕는 것으로서 사용되는 것도 아니다.
그래픽 동작들을 통합하기 위한 기술이 기재된다. 적어도 일부 실시예에서, 복수의 그래픽 동작들이 그래픽 사용자 인터페이스(GUI; graphical user interface)와 같은 그래픽 요소(graphical element)에 적용되도록 발생될 수 있다. 그래픽 동작들은, 프로세싱 및 렌더링될 수 있는 단일의 렌더링가능한(renderable) 그래픽 동작으로 통합될 수 있다.
첨부 도면을 참조하여 상세한 설명이 기재된다. 도면에서, 참조 번호의 제일 왼쪽의 숫자(들)는 그 참조 번호가 처음 나타나는 도면을 나타낸다. 명세서 및 도면에서 상이한 경우에서의 동일한 참조 번호의 사용은 유사하거나 동일한 항목을 나타낼 수 있다.
도 1은 여기에서 설명되는 기술을 채용하도록 동작 가능한 예시적인 구현에서의 환경의 예시이다.
도 2는 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 3은 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 4는 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 5는 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 6은 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 7은 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다.
도 8은 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다.
도 9는 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 10은 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 11은 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 12는 하나 이상의 실시예에 따른 예시적인 구현 시나리오를 예시한다.
도 13은 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다.
도 14는 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다.
도 15는 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다.
도 16은 여기에 기재된 기술의 실시예를 구현하도록 구성되는, 도 1에 관련하여 기재된 바와 같은 예시적인 시스템 및 컴퓨팅 디바이스를 예시한다.
개요
그래픽 동작들을 통합하기 위한 기술이 기재된다. 적어도 일부 실시예에서, 복수의 그래픽 동작들이 그래픽 사용자 인터페이스(GUI)와 같은 그래픽 요소에 적용되도록 발생될 수 있다. 그래픽 동작들은, 프로세싱 및 렌더링될 수 있는 단일의 렌더링가능한 그래픽 동작으로 통합될 수 있다.
예를 들어, 웹 브라우저가 웹페이지를 디스플레이하는 시나리오를 고려하자. 여기에서 설명되는 기술은, 웹페이지 JavaScript 실행, 포맷팅 태스크, 레이아웃 태스크, 입력 프로세싱 태스크 등과 같이 웹페이지에 대한 다양한 프로세싱을 수행하도록 제1 쓰레드를 이용할 수 있다. 스크린에 웹페이지의 현재 뷰(view)를 디스플레이하는 것과 같이 렌더링 태스크를 수행하도록 제2의 독립적으로 실행중인 쓰레드가 채용될 수 있다.
웹페이지의 시각적 속성(attribute)에 영향을 미치는 이벤트에 기초하여, 제1 쓰레드는 웹페이지에 대한 시각적 상태 정보를 변경하는 그래픽 동작들을 수행할 수 있다. 이러한 이벤트의 예는, 웹페이지에의 사용자 입력, 그래픽 요소의 애니메이션, 다른 프로세스에 의해 발생된 이벤트 등을 포함한다. 시각적 상태 정보는 예를 들어, 웹페이지의 그래픽 요소의 이동, 그래픽 요소의 리사이징 및/또는 리컬러링, 웹페이지의 패닝 및/또는 스크롤링 등과 같은, 웹페이지의 시각적 상태에 대한 변경을 포함할 수 있다.
예시적인 시나리오에 더하여, 제2 쓰레드는, 그래픽 동작들을 처리하고 동작들에 기초한 웹페이지로 렌더링하는 데에 즉시 이용가능하지 않을 수 있다. 예를 들어, 제2 쓰레드는 제1 쓰레드에 의해 발생된 이전의 그래픽 동작들에 기초하여 렌더링하느라 비지(busy) 상태일 수 있다.
그에 따라, 제2 쓰레드가 이용가능하게 될 때까지 그래픽 동작들은 큐잉될(queued) 수 있다. 그래픽 동작들은, 예를 들어, 각각이 웹페이지의 시각적 상태의 이산(discrete) 변경에 대응하는 "동기점들(synchronization points)"로서 큐잉될 수 있다. 제2 쓰레드가 그래픽 동작들을 처리하도록 이용가능하게 될 때에, 그래픽 동작들은 웹페이지에 적용될 수 있는 단일 그래픽 동작으로 통합될 수 있다. 어느 쓰레드든 예를 들어, 그래픽 동작들을, 개별 동작들 각각으로부터의 상태 변경을 반영하는 결합된 그래픽 동작으로 결합할 수 있다. 따라서, 제2 쓰레드는 개별적으로 각각의 그래픽 동작을 처리할 필요가 없고, 결합된 그래픽 동작을 처리 및 렌더링하여, 각각의 그래픽 동작이 개별적으로 처리되었다면 일어났을 바와 동일한 웹페이지의 시각적 상태에 도달할 수 있다.
다음의 설명에서, 여기에 기재된 기술을 채용하도록 동작가능한 예시적인 환경이 먼저 기재된다. 다음으로, "상태 정보를 전파하기 위한 동기점들(Synchronization Points for Propagating State Information)"이란 제목의 부분은, 하나 이상의 실시예에 따라 동기점들을 이용하는 일부 예시적인 구현 시나리오 및 절차를 기재한다. 이에 이어서, "그래픽 동작들의 통합(Coalescing Graphics Operations)"이란 제목의 부분은, 하나 이상의 실시예에 따라 그래픽 동작들을 통합하기 위한 일부 예시적인 구현 시나리오 및 절차를 기재한다. 마지막으로, "예시적인 시스템 및 디바이스(Example System and Device)"란 제목의 부분은, 하나 이상의 실시예에 따라 여기에 설명된 기술을 채용하도록 동작가능한 예시적인 시스템 및 디바이스를 기재한다.
하나 이상의 실시예에 따른 예시적인 구현의 개요를 제시하였으니, 이제 예시적인 구현이 채용될 수 있는 예시적인 환경을 고려하자.
예시적인 환경
도 1은 여기에 기재된 그래픽 동작들을 통합하기 위한 기술을 채용하도록 동작가능한 예시적인 구현에서의 환경(100)의 예시이다. 예시된 환경(100)은 다양한 방식으로 구성될 수 있는 컴퓨팅 디바이스(102)를 포함한다. 예를 들어, 컴퓨팅 디바이스(102)는 도 16에 관련하여 더 기재되는 바와 같이 종래의 컴퓨터(예를 들어, 데스크톱 개인용 컴퓨터, 랩톱 컴퓨터 등), 이동국, 엔터테인먼트 기기, 텔레비전에 통신가능하게 결합된 셋톱 박스, 무선 전화, 넷북, 게임 콘솔, 핸드헬드 디바이스(예를 들어, 태블릿) 등으로서 구성될 수 있다.
컴퓨팅 디바이스(102)는, 컴퓨팅 디바이스(102)에 대한 다양한 유형의 데이터 프로세싱을 수행할 기능성을 나타내는 프로세서(104)를 포함한다. 예를 들어, 프로세서(104)는 컴퓨팅 디바이스(102)의 중앙 프로세싱 유닛(CPU)을 나타낼 수 있다. 프로세서(104)는 프로세싱 태스크들을 개별적으로 수행할 수 있는 복수의 프로세서 코어들을 포함한다. 따라서, 프로세서(104)는 복수의 프로세싱 쓰레드들을 동시에 실행하는 것과 같은 병렬 프로세싱을 수행하도록 구성된다. 프로세서(104)의 부가의 구현 예들이 도 16에 관련하여 아래에 설명된다.
컴퓨팅 디바이스(102)는, 컴퓨팅 디바이스(102)를 통해 다양한 태스크들을 수행할 기능성을 나타내는 애플리케이션(106)을 더 포함한다. 애플리케이션(106)의 예는, 워드 프로세서 애플리케이션, 이메일 애플리케이션, 컨텐츠 편집 애플리케이션, 게임 애플리케이션 등을 포함한다.
애플리케이션(106)은, 웹 컨텐츠와 관련하여 동작하는 애플리케이션을 나타내는 웹 플랫폼 애플리케이션(108)을 포함한다. 웹 플랫폼 애플리케이션(108)은 예를 들어, 예로써 비한정적으로 URL(uniform resource locator), HTTP(Hypertext Transfer Protocol), REST(Representational State Transfer), HTML(HyperText Markup Language), CSS(Cascading Style Sheets), JavaScript, DOM(Document Object Model) 뿐만 아니라 기타 기술과 같은 많은 다양한 유형의 기술들을 포함하고 사용할 수 있다. 웹 플랫폼 애플리케이션(108)은 또한, XAML(Extensible Application Markup Language), XML(Extensible Markup Language), JSON(JavaScript Object Notation) 등과 같은 다양한 데이터 포맷들로 작업할 수 있다. 웹 플랫폼 애플리케이션(108)의 예는 웹 브라우저, 웹 애플리케이션(예를 들어, "웹 앱") 등을 포함한다.
컴퓨팅 디바이스(102)에 대한 다양한 양상의 프로세싱 태스크들을 관리할 기능성을 나타내는 프로세서 매니저 모듈(110)이 더 예시되어 있다. 컴퓨팅 디바이스(102)에 대한 다양한 그래픽 관련 태스크들을 수행할 기능성을 나타내는 그래픽 모듈(112)인 또한 포함된다. 예를 들어, 그래픽 모듈(112)은 그래픽 프로세싱, 렌더링 태스크 등을 수행할 수 있다. 그래픽 모듈(112)은 예를 들어, 웹 플랫폼 애플리케이션(108)과 같은 애플리케이션(106)에 대한 렌더링 엔진을 나타낼 수 있다. 적어도 일부 실시예에서, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은 여기에서 설명되는 그래픽 동작들을 통합하기 위한 기술을 구현하도록 레버리징(leveraged)될 수 있다.
프로세스 매니저 모듈(110) 및 그래픽 모듈(112)이 애플리케이션(106)과 별개로 예시되어 있지만, 이는 한정하는 것으로 의도되지 않는다. 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은, 예를 들어, 그들 각자의 기능성이 애플리케이션(106)에 의해 레버리징될 수 있도록 애플리케이션(106)의 부분 및/또는 확장으로서 구현될 수 있다. 대안으로서 또는 추가적으로, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)은 컴퓨팅 디바이스(102)의 운영 체제의 부분으로서 구현될 수 있다. 프로세스 매니저 모듈(110) 및 그래픽 모듈(112)의 부가의 동작적 양상들이 아래에 설명된다.
컴퓨팅 디바이스(102)는, 컴퓨팅 디바이스(102)에 대한 그래픽을 출력하도록 구성되는 디스플레이 디바이스(114)를 포함한다. 디스플레이 디바이스(114) 상에 디스플레이된 것은, 애플리케이션(106) 중의 하나와 연관된 GUI를 나타내는 그래픽 사용자 인터페이스(GUI)(116)이다. GUI(116)는 예를 들어 웹 플랫폼 애플리케이션(108)을 통해 제시되는 웹 컨텐츠를 포함할 수 있다. 예를 들어, GUI(116)는 웹페이지와 같은 웹 문서를 나타낼 수 있다. 하나 이상의 실시예에 따르면, 여기에서 설명되는 그래픽 동작들을 통합하기 위한 기술은, 레이아웃 프로세싱, 입력 프로세싱, 그래픽 렌더링 등과 같이 GUI(116)에 관련된 다양한 프로세싱 태스크들을 수행하도록 채용될 수 있다.
여기에 기재된 기술이 동작할 수 있는 예시적인 환경이 기재되었으니, 이제 다음 부분은 하나 이상의 실시예에 따라 상태 정보를 전파하기 위해 동기점들을 이용하기 위한 예시적인 기술을 설명하고, 그 다음 그래픽 동작들을 통합하기 위한 예시적인 기술을 설명한다.
상태 정보를 전파하기 위한 동기점들
다음 부분은, 하나 이상의 실시예에 따라 상태 정보를 전파하기 위해 동기점들을 이용하는 것과 관련하여 예시적인 구현 시나리오 및 절차를 기재한다.
예시적인 구현 시나리오
다음의 설명은, 여기에 기재된, 상태 정보를 전파하기 위해 동기점들을 이용하기 위한 기술에 대한 일부 예시적인 구현 시나리오를 기재한다. 예시적인 구현 시나리오는 도 1의 환경(100), 도 16의 시스템(1600), 및/또는 임의의 기타 적합한 환경에서 구현될 수 있다. 시나리오는, 예를 들어, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)의 기능성을 나타낼 수 있다. 예를 들어, 상이한 시나리오에서 설명되는 프로세싱 쓰레드가, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)에 의해 발생 및/또는 유지될 수 있다.
도 2는 하나 이상의 실시예에 따른 예시적인 구현 시나리오(200)를 예시한다. 시나리오(200)는, 디스플레이될 수 있는 다양한 그래픽 요소들을 나타내는 GUI(202)를 포함한다. GUI(202)는 예를 들어, 환경(100)에 관련하여 상기 설명된 GUI(116)의 구현을 나타낼 수 있다. GUI(202)는 시각적 요소(202a)를 포함한다.
시나리오(200)는 기본(primary) 쓰레드(204) 및 렌더(render) 쓰레드(206)를 더 포함하며, 이들은 GUI(202)를 발생, 관리, 및 렌더링하는 부분으로서 다양한 프로세싱 태스크들을 수행하도록 채용되는 쓰레드들을 나타낸다.
일반적으로, 기본 쓰레드(204)는 GUI(202)에 대한 다양한 유형의 관리 태스크들을 수행하는 프로세싱 쓰레드를 나타낸다. 관리 태스크의 예는, 애플리케이션(106) 중의 하나에 대한 것과 같은 GUI(202)를 발생하는 것을 포함한다. 관리 태스크의 다른 예는, GUI(202)에 대한 스크립트(예를 들어, JScript) 실행, GUI 포맷팅 태스크, GUI 레이아웃 태스크, DOM 조작 등을 포함한다. 렌더 쓰레드(206)는, 디스플레이에 GUI(202)의 픽셀 페인팅과 같은, 렌더링 동작들을 수행하는 프로세싱 쓰레드를 나타낸다. 예를 들어, 기본 쓰레드(204)에 의해 발생된 GUI(202)의 시각적 양상들에 대한 변경은, 렌더 쓰레드(206)에 의해 디스플레이를 위해 렌더링될 수 있다. 다양한 실시예에 따라, 기본 쓰레드(204)는 렌더링 및 디스플레이를 위해 렌더 쓰레드(206)에 다양한 그래픽 정보를 전달할 수 있다.
시나리오(200)의 중앙 부분으로 진행하여, GUI(202)의 시각적 양상에 대한 변경은 기본 쓰레드(204)가 그래픽 데이터(208)를 발생하게 한다. 그래픽 데이터(208)는 예를 들어, GUI(202)의 시각적 양상에 대한 변경을 기술할(describe) 수 있다. 이러한 변경의 예는, 컬러 변경, 시각적 요소 리사이징, 시각적 요소의 애니메이션, 시각적 요소의 재위치 등을 포함한다. 변경은, 예를 들어, 다양한 유형의 사용자 입력을 통한 GUI(202)와의 사용자 상호작용, 시간 기반의 통지, 또는 웹사이트 코드 실행으로부터의 변경에 응답하는 것을 비롯하여 다양한 방식으로 일어날 수 있다.
그래픽 데이터(208)를 발생하는 것에 응답하여, 페인팅가능한 동기점(PSP; paintable synchronization point)(210)이 발생된다. 일반적으로, PSP(210)는, GUI(202)의 부분들을 렌더링하도록 렌더 쓰레드(206)에 의해 사용될 수 있는 정보 세트를 나타낸다. PSP(210)는 예를 들어 그래픽 데이터(208)를 포함할 수 있고/있거나 그래픽 데이터(208)에 기초할 수 있다. 대안으로서 또는 추가적으로, PSP(210)는, 그래픽 데이터(208)가 상주하는 메모리 어드레스와 같이, 렌더 쓰레드(206)가 그래픽 데이터(208)를 검색할 수 있게 하기에 충분한 정보를 포함할 수 있다.
적어도 일부 실시예에서, PSP(210)는 GUI(202)에 대한 다양한 유형의 상태 정보를 포함한다. 예를 들어, PSP(210)는, 이전의 PSP가 발생되었고 그리고/또는 이전의 렌더 동작이 렌더 쓰레드(206)에 의해 수행된 이래로 변한 GUI(202)의 시각적 속성의 표시와 같은 상태 변경 정보를 포함할 수 있다. 따라서, 하나 이상의 실시예에 따라, PSP(210)는 GUI(202)의 완전한 렌더링에 대한 데이터를 포함하지 않을 수 있고, 단순히 GUI(202)를 새로운 시각적 상태로 업데이트하기에 충분한 상태 변경 정보를 표시할 수 있다. 이는 한정하는 것으로 의도되지 않지만, 적어도 일부 실시예에서 PSP는 GUI의 완전한 렌더링을 나타낼 수 있다.
PSP(210)를 방출한(emit) 후에, 기본 쓰레드(204)는, 예를 들어 렌더 쓰레드(206)가 PSP(210)를 검색 및/또는 처리하기를 기다리지 않고, GUI(202)에 대한 프로세싱 관리 태스크들을 계속할 수 있다.
시나리오(200)의 하단 부분으로 진행하여, 렌더 쓰레드(206)는 상태 변경(212)을 발생하도록 PSP(210)를 처리한다. 일반적으로, 상태 변경(212)은, PSP(210)로부터의 상태 정보에 기초한, GUI(202)의 일부의 리렌더(re-render)이다. 따라서, GUI(202)의 시각적 상태를 PSP(210)에 의해 표시된 시각적 상태와 동기화하도록, 상태 변경(212)이 GUI(202)에 적용된다(예를 들어, 렌더 및/또는 드로잉(draw) 동작의 일부로서). 이 특정 예에서, 상태 변경(212)의 적용은 시각적 요소(202a)의 재위치, 예를 들어 GUI(202) 내의 시각적 요소(202a)의 병진 이동을 야기한다.
따라서, 시나리오(200)는, 제1 쓰레드에 의해 발생된 그래픽 요소의 시각적 상태에 대한 변경이, 변경을 적용하도록 또다른 쓰레드에 의해 소비될 수 있는 PSP를 통해 캡슐화(encapsulated)될 수 있다는 것을 예시한다. 또한, 제1 쓰레드는 PSP가 방출된 후에, 예를 들어 PSP가 처리되기를 기다리지 않고서, 다른 프로세싱 태스크들을 수행하기를 계속할 수 있다. 따라서, 적어도 일부 실시예에서, PSP는 상태 정보가 독립적인 쓰레드들 사이에 전송될 수 있는 메커니즘을 제공한다.
적어도 일부 실시예에서, 여기에서 설명되는 기술은 복수의 PSP들이 비동기적으로 발생 및 처리될 수 있게 한다. 예를 들어, 다음 예시적인 시나리오를 고려하자.
도 3은 하나 이상의 실시예에 따른 예시적인 구현 시나리오(300)를 예시한다. 시나리오(300)는, 디스플레이될 수 있는 다양한 그래픽 요소들을 나타내는 GUI(302)를 포함한다. GUI(302)는 예를 들어, 환경(100)과 관련하여 상기에 설명된 GUI(116)의 구현을 나타낼 수 있다. GUI(302)는 시각적 요소(302a)를 포함한다.
시나리오(300)는 GUI(302)에 대한 기본 쓰레드(304) 및 렌더 쓰레드(306)를 더 포함한다. 기본 쓰레드 및 렌더 쓰레드에 관한 예시적인 세부사항들은 상기에 설명되어 있다. GUI(302)에 대한 시각적 상태 변경에 기초하여, 복수의 PSP들을 포함하는 PSP 큐(queue)(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)의 이동에 대응할 수 있다.
적어도 일부 실시예에서, 렌더 쓰레드(306)가 PSP들을 처리 및 적용할 수 있는 것보다 더 빠르게 PSP들이 기본 쓰레드(304)에 의해 발생될 때, PSP들은 PSP 큐(308)에 누적될 수 있다. 예를 들어, 렌더 쓰레드(306)는 최근 소비된 PSP에 기초하여 복잡하고 시간 소모적인 렌더 동작을 수행하고 있을 수 있으며, 그리하여 기본 쓰레드(304)는 렌더 쓰레드(306)가 복잡한 렌더 동작을 완료하기 전에 추가의 PSP들을 발생한다. 따라서, PSP들은 시간적으로 순차적인 순서대로 큐잉될 수 있으며, 오래된 PSP가 큐에서 더 새로운 PSP 전에 배치된다.
시나리오(300)의 하단 부분으로 진행하여, 렌더 쓰레드(306)는 PSP 큐(308)로부터 PSP(310)를 검색한다. 렌더 쓰레드(306)는 상태 변경(316)을 발생하도록 PSP(310)를 처리한다. 상태 변경(316)은 GUI(302)의 시각적 상태의 변경에 대응한다. 예를 들어, 상태 변경(316)은 GUI(302)의 이전의 시각적 상태와 현재의 시각적 상태 사이의 차이를 나타낸다. 그에 따라, 적어도 일부 실시예에서, PSP(310) 및 따라서 상태 변경(316)은 GUI(302)의 완전한 리렌더링(re-rendering)을 나타내지 않고, GUI(302)의 일부의 시각적 상태를 업데이트하도록 적용될 수 있는 데이터를 포함한다.
렌더 쓰레드(306)는, 예를 들어 GUI의 일부를 리렌더링함으로써, 상태 변경(316)을 GUI(302)에 적용한다. 예를 들어, 렌더 쓰레드(306)는, PSP(310)로부터 발생된 상태 변경(316)으로부터의 데이터에 기초하여, 시각적 요소의 리컬러링, 시각적 요소의 리사이징 등과 같이, 시각적 요소(302a)의 시각적 양상을 변경할 수 있다. 대안으로서 또는 추가적으로, 상태 변경(316)을 적용하는 것은, 병진, 회전 등과 같은 시각적 요소(302a)의 이동을 수반할 수 있다.
렌더 쓰레드(306)가 PSP(310)를 검색하고 처리하는 것에 응답하여, 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)는 예를 들어, 환경(100)에 관련하여 상기에 설명된 GUI(116)의 구현을 나타낼 수 있다. GUI(402)는 시각적 요소(402a)를 포함한다.
GUI(402)에 대한 기본 쓰레드(404) 및 렌더 쓰레드(406)가 더 예시되어 있다. 기본 쓰레드 및 렌더 쓰레드에 관한 세부사항들은 상기에 설명되어 있다.
시나리오(400)의 중앙 부분으로 진행하여, 사용자는 GUI(402)에 입력(408)을 제공한다. 입력(408)의 예는 터치 입력, 마우스 입력, 키보드 입력, 음성 입력 등을 포함한다. 적어도 일부 실시예에서, 입력(408)은 입력 디바이스 드라이버와 같은 입력 기능성으로부터 수신된 입력 데이터를 나타낸다.
입력(408)을 수신하는 것에 응답하여, 기본 쓰레드(404)는 PSP(410)를 발생하도록 입력(408)을 처리한다. PSP(410)는 입력(408)에 기초한 GUI(402)에 대한 변경을 나타낸다. PSP(410)는 예를 들어 GUI(402)의 다양한 조작을 표시할 수 있다. 예를 들어, PSP(410)는, GUI(402)가 디스플레이 영역 내에서 스크롤링될 것임, GUI(402)의 일부 상의 줌인 또는 줌아웃, 시각적 요소(402a)에 대한 변경 등을 표시할 수 있다.
시나리오(400)의 하단 부분으로 계속하여, 렌더 쓰레드(406)는 GUI(402)에 대한 상태 변경(412)을 발생하도록 PSP(410)를 검색하고 처리한다. 상태 변경(412)은 PSP(410)에 기초하여, 예를 들어 입력(408)에 기초하여, GUI(402)의 리렌더를 표시한다. 따라서, 렌더 쓰레드(406)는 입력(408)에 기초하여 GUI(402)를 렌더링한다. 상기 인용된 바와 같이, 이는 GUI(402)의 스크롤링, GUI(402)의 일부 상의 주밍, GUI(402)의 패닝, 및/또는 GUI(402)의 일부의 다른 조작을 포함할 수 있다.
따라서, 렌더 쓰레드(406)가 사용자 입력을 기술하는 데이터를 획득하였다면(예를 들어, PSP로부터 및/또는 달리), 렌더 쓰레드(406)는 기본 쓰레드(404)와의 상호작용에 독립적으로 GUI(402)에 입력을 적용할 수 있다. 이는 입력이 렌더 쓰레드(406)에 의해 적용되고 있는 동안 기본 쓰레드(404)가 다른 프로세싱을 수행할 수 있게 하며, 기본 쓰레드(404)가 또다른 태스크로 비지 상태이더라도 렌더 쓰레드(406)가 입력(408)에 기초하여 GUI(402)를 능동으로 렌더링할 수 있게 한다.
다양한 실시예에 따라, 디스플레이의 시각적 영역(예를 들어, GUI)을 기술하는 데이터는 트리 구조, 또는 "디스플레이 트리"로 나타날 수 있다. 일반적으로, 디스플레이 트리는, 디스플레이의 영역의 다양한 시각적 요소들을 나타내는 데이터 구조이다. 디스플레이 트리는, 예를 들어 GUI의 각자의 시각적 요소들에 대응하는 상이한 노드들을 포함한다. 아래에 기재된 바와 같이, 쓰레드들 사이의 상호작용은 디스플레이 트리의 조작 및 버전을 통해 특징화(characterize)될 수 있다. 예를 들어, 다음 예시적인 시나리오를 고려하자.
도 5는 하나 이상의 실시예에 따른 예시적인 구현 시나리오(500)를 예시한다. 시나리오(500)는, 디스플레이될 수 있는 다양한 그래픽 요소들을 나타내는 GUI(502)를 포함한다. GUI(502)는 예를 들어, 환경(100)에 관련하여 상기에 설명된 GUI(116)의 구현을 나타낼 수 있다. GUI(502)는 윈도우, 그래픽, 텍스트, 이미지, GPU(Graphics Processing Unit) 프리미티브 등과 같은 다양한 시각적 요소들을 포함한다.
시나리오(500)는 GUI(502)에 대한 기본 쓰레드(504) 및 렌더 쓰레드(506)를 더 포함한다. 기본 쓰레드 및 렌더 쓰레드에 관한 예시적인 세부사항들은 상기에 설명되어 있다. 기본 쓰레드(504)는, GUI(502)의 데이터 표현인 디스플레이 트리(508)와 연관된다. 디스플레이 트리(508)는 예를 들어, GUI(502)의 다양한 시각적 요소들을 나타내는 노드들을 포함한다. 예를 들어, 디스플레이 트리(508)는, GUI(502)의 기본 윈도우를 나타내는 부모(parent) 노드 뿐만 아니라, GUI(502)의 각자의 시각적 요소를 각각 나타내는 복수의 자식(child) 노드들을 포함한다.
하나 이상의 실시예에 따르면, 디스플레이 트리(508)는 기본 쓰레드(504)에 의해 GUI(502)에 대한 다양한 프로세싱을 수행하도록 이용된다. 예를 들어, GUI(502)의 시각적 요소들에 대한 수정을 나타내는 다양한 이벤트들이 일어나므로, 기본 쓰레드(504)는 그에 따라 디스플레이 트리(508)를 수정한다. 따라서, 디스플레이 트리(508)는 기본 쓰레드(504)에 의해 "소유되는(owned)" 것이며, GUI(502)에 전파될 다양한 변경들을 반영하도록 기본 쓰레드(504)에 의해 업데이트가능하다.
시나리오(500)의 중앙 부분으로 진행하여, 여기에서 설명되는 다양한 기술에 따라 PSP(510)가 기본 쓰레드(504)에 의해 발생된다. PSP(510)는, 예를 들어 GUI(502)의 시각적 양상을 변경하는 다양한 이벤트에 응답하여, 기본 쓰레드(504)에 의해 방출될 수 있다. PSP(510)는 디스플레이 트리(512)와 연관된다.
하나 이상의 실시예에 따라, 디스플레이 트리(512)는 특정 순간에 캡처된 디스플레이 트리(508)의 스냅샷(예를 들어, 카피(copy))을 나타낸다. 예를 들어, 기본 쓰레드(504)는 다양한 이벤트에 응답하여 디스플레이 트리(508)의 하나 이상의 노드를 수정할 수 있다. 그 다음, 기본 쓰레드(504)는 디스플레이 트리(512)로서 디스플레이 트리(508)의 카피를 발생할 수 있다. 기본 쓰레드(504)는, 디스플레이(512)를 포함하고/포함하거나 디스플레이 트리(512)에 링크되는 PSP(510)를 방출한다. 따라서, 디스플레이 트리(512)는 시간상 특정 인스턴스에 디스플레이 트리(508)의 상태에 대응한다.
기본 쓰레드(504)가 디스플레이 트리(512)로 PSP(510)를 방출한 후에, 기본 쓰레드(504)는 다른 태스크들을 수행하는 것으로 진행할 수 있다. 예를 들어, 기본 쓰레드는 디스플레이 트리(512)에 영향을 미치지 않고 디스플레이 트리(508)에 부가의 수정을 행할 수 있다.
시나리오(500)는 렌더 쓰레드(506)에 의해 유지된 디스플레이 트리(514)를 더 포함한다. 일반적으로, 디스플레이 트리(514)는 렌더 쓰레드(506)에 의해 GUI(502)의 시각적 양상들을 렌더링하기 위해 이용된다. 예를 들어, 렌더 쓰레드(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)로 전파되며, 그 다음 그 자신의 디스플레이 트리(514)에 시각적 프로세싱을 적용한다.
시나리오(500)의 하단 부분에는, 기본 쓰레드(504)가 디스플레이 트리(518)를 포함하는 PSP(516)를 방출하는 것이 더 예시되어 있다. 디스플레이 트리(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)에 대한 디스플레이 트리의 적어도 3가지 상태들이 유지될 수 있다. 기본 쓰레드(504)는 GUI(502)의 시각적 상태에 다양한 변경을 적용하는 디스플레이 트리(508)를 유지한다. GUI(502)의 시각적 상태에 대한 변경이 렌더 쓰레드(506)에 전파되고 디스플레이될 수 있게 하도록, 디스플레이 트리(508)의 상태는 렌더 쓰레드(506)에 의한 소비를 위해 지속될 수 있는 중간 디스플레이 트리를 통해 캡처될 수 있다. 예를 들어, 디스플레이 트리(512, 518)는 디스플레이 트리(508)의 상이한 상태에서 캡처된 디스플레이 트리(508)의 스냅샷을 나타낸다. 또한, 렌더 쓰레드(506)는, 중간 디스플레이 트리로 동기화하고 GUI(502)에의 렌더링을 위해 읽어들이는 디스플레이 트리(514)를 유지한다.
적어도 일부 실시예에서, PSP들은 디스플레이 트리의 전체 카피가 발생될 필요 없이 디스플레이 트리에 대한 변경을 전파하도록 채용될 수 있다. 예를 들어, 다음 예시적인 시나리오를 고려하자.
도 6은 하나 이상의 실시예에 따른 예시적인 구현 시나리오(600)를 예시한다. 시나리오(600)는 디스플레이될 수 있는 다양한 그래픽 요소들을 나타내는 GUI(602)를 포함한다. GUI(602)는 예를 들어, 환경(100)에 관련하여 상기 설명된 GUI(116)의 구현을 나타낼 수 있다. GUI(602)는 윈도우, 그래픽, 텍스트, 이미지 등과 같은 다양한 시각적 요소들을 포함한다.
시나리오(600)는, GUI(602)에 대한 기본 쓰레드(604) 및 렌더 쓰레드(606)를 더 포함한다. 기본 쓰레드 및 렌더 쓰레드에 관한 예시적인 세부사항들은 상기에 설명되어 있다. 기본 쓰레드(604)는, GUI(602)의 데이터 표현인 디스플레이 트리(608)와 연관된다.
시나리오(600)의 중앙 부분으로 진행하여, 여기에서 설명되는 다양한 기술에 따라 PSP(610)가 기본 쓰레드(604)에 의해 발생된다. PSP(610)는, 예를 들어 GUI(602)의 시각적 양상을 변경하는 다양한 이벤트에 응답하여, 기본 쓰레드(604)에 의해 방출될 수 있다.
PSP(610)는, 발생된 디스플레이 트리(608)에 대한 변경을 나타내는 변경 데이터(612)를 포함한다. 예를 들어, 기본 쓰레드(604)는 다양한 이벤트에 응답하여 디스플레이 트리(608)의 하나 이상의 노드를 수정할 수 있다. 노드 추가, 노드 삭제, 노드 재배열 등과 같은 다른 유형의 변경도 또한 행해질 수 있다. 그 다음, 기본 쓰레드(604)는, 디스플레이 트리(608)에 행해진 변경을 명시하는 변경 데이터(612)를 발생할 수 있다. 기본 쓰레드(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)는, 렌더 쓰레드(606)가 PSP(610)를 해제하고(release) 그리고/또는 후속 PSP를 처리하는 것으로 넘어갈 때까지, 유효하고 렌더 쓰레드(606)에 의해 사용가능한 것으로 남아있는 디스플레이 트리(608)의 유효 상태를 나타낸다. 적어도 일부 실시예에서, 렌더 쓰레드(606)가 PSP(610)를 처리하는 것이 끝난 후에, PSP(610)에 대한 메모리 어드레스 및/또는 어드레스들이 다른 목적을 위해, 예를 들어 후속 PSP에 대하여 사용되도록 해제될 수 있다.
따라서, 기본 쓰레드(604)에 의해 디스플레이 트리(608)에 적용된 시각적 프로세싱이 변경 데이터(612)를 통해 렌더 쓰레드(606)로 전파되며, 그 다음 그 자신의 디스플레이 트리(614)에 시각적 프로세싱을 적용한다.
시나리오(600)의 하단 부분에는, 기본 쓰레드(604)가 변경 데이터(618)를 포함하는 PSP(616)를 방출하는 것이 더 예시되어 있다. 변경 데이터(618)는 예를 들어, 기본 쓰레드(604)가 PSP(610)를 방출하는 것에 이어서 발생된, 디스플레이 트리(608)의 상태에 대한 변경을 표시한다.
렌더 쓰레드(606)가 디스플레이 트리(614)의 현재 상태로부터 GUI(602)로 드로잉하는 것이 끝날 때, 렌더 쓰레드(606)는 PSP(616)를 검색할 수 있고 변경 데이터(618)에 기초하여 디스플레이 트리(614)를 동기화할 수 있다. 그 다음, 렌더 쓰레드(606)는 업데이트된 디스플레이 트리(614)에 기초하여 GUI(602)를 렌더링하는 것으로 진행할 수 있다.
따라서, 시나리오(600)는, GUI에 대한 디스플레이 트리의 복수의 카피를 발생하지 않고서 PSP들이 쓰레드들 사이에 GUI의 시각적 상태의 변경을 공유하도록 채용될 수 있다는 것을 예시한다. 또한, PSP를 발생한 기본 쓰레드가 다른 프로세싱을 수행하는 동안, 특정 상태의 디스플레이 트리가 렌더 쓰레드에 대하여 지속될 수 있도록 PSP의 수명이 관리될 수 있다.
상기에 제시된 시나리오들은 렌더링 시나리오에 관련하여 설명되어 있지만, 이는 한정하는 것으로 의도되지 않는다. 예를 들어, 다양한 상이한 프로세스들 및/또는 태스크들의 일부로서 다양한 상이한 쓰레드들 사이에 상태 정보를 전파하는 데 동기점들이 사용될 수 있다.
적어도 일부 실시예에서, GUI는, 예를 들어 경제 또는 정확도의 이유로, 상이한 쓰레드 상에 별도로 렌더링될 수 없거나 렌더링되어서는 안되는 특정 요소들을 포함할 수 있다. 따라서, 이러한 실시예는, 개선된 성능을 위해 렌더 쓰레드를 사용하는 것이 적합하다고 다시 여길 때까지, 기본 쓰레드 상에서 PSP를 처리하기를 선택할 수 있다. 또한, 이러한 실시예는, 자원의 이용능력(availability)에 따라, 렌더 쓰레드의 생성을 연기하거나, 이를 중지하거나, 또는 이를 종료하기를 선택할 수 있다.
일부 예시적인 구현 시나리오를 설명하였으니, 이제 하나 이상의 실시예에 따른 일부 예시적인 절차의 설명을 고려하자.
예시적인 절차
다음의 설명은 하나 이상의 실시예에 따라 상태 정보에 대한 동기점들에 대한 일부 예시적인 절차를 기재한다. 예시적인 절차는 도 1의 환경(100), 도 16의 시스템(1600), 및/또는 임의의 기타 적합한 환경에서 채용될 수 있다.
도 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은 시각적 상태의 변경을 적용하도록 그래픽 요소를 렌더링한다. 렌더 쓰레드는 예를 들어, 렌더 쓰레드에 의해 유지된 디스플레이 트리에, 시각적 상태에 대한 변경을 적용할 수 있다. 그 다음, 렌더 쓰레드는 업데이트된 디스플레이 트리에 기초하여 그래픽 요소를 렌더링할 수 있다.
실시예는 2개의 상이한 쓰레드들 사이의 상호작용에 관련하여 여기에 설명되어 있지만, 이는 단지 예의 목적을 위해 제시된 것이다. 예를 들어, 적어도 일부 실시예에서, 복수의 상이한 쓰레드들이 동기점들을 생성할 수 있고, 특정 쓰레드에 의한 프로세싱을 위해 동기점들을 방출할 수 있다. GUI 렌더링 시나리오에서, 예를 들어, 복수의 상이한 쓰레드들은 GUI의 시각적 양상에 대한 변경을 명시하는 동기점들을 생성할 수 있다. 동기점들은 렌더링 쓰레드에 의한 소비를 위해 상이한 쓰레드들에 의해 방출될 수 있다.
상태 정보에 대한 동기점들에 대한 일부 예시적인 구현 시나리오 및 절차를 설명하였으니, 이제 하나 이상의 실시예에 따라 그래픽 동작들을 통합하기 위한 일부 예시적인 구현 시나리오 및 절차를 고려하자.
그래픽 동작들의 통합
다음 부분은 하나 이상의 실시예에 따라 그래픽 동작들을 통합하는 것에 관련하여 예시적인 구현 시나리오 및 절차를 기재한다. 적어도 일부 실시예에서, 아래에 설명된 시나리오 및 절차는 상기 설명된 기술의 양상들을 채용할 수 있다.
예시적인 구현 시나리오
다음의 설명은 여기에 기재되는, 그래픽 동작들을 통합하기 위한 기술에 대한 일부 예시적인 구현 시나리오를 기재한다. 예시적인 구현 시나리오는 도 1의 환경(100), 도 16의 시스템(1600), 및/또는 임의의 기타 적합한 환경에서 구현될 수 있다. 시나리오는 예를 들어 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)의 기능성을 나타낼 수 있다. 예를 들어, 상이한 시나리오에서 설명된 프로세싱 쓰레드가 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)에 의해 발생 및/또는 유지될 수 있다.
도 9는 하나 이상의 실시예에 따른 예시적인 구현 시나리오(900)를 예시한다. 시나리오(900)는 GUI(906)에 대한 기본 쓰레드(902) 및 렌더 쓰레드(904)를 포함한다. 기본 쓰레드 및 렌더 쓰레드의 예시적인 구현들은 상기에 설명되어 있다.
시나리오(900)의 상단 부분에 더 예시된 바와 같이, 렌더 쓰레드(904)는 기본 쓰레드(902)에 의해 방출된 PSP에 기초한 것과 같은 렌더 동작을 수행하고 있다. 렌더 쓰레드(904)가 렌더 동작을 수행하고 있는 동안, 기본 쓰레드(902)는, GUI(906)로 렌더링될 시각적 변경을 발생하는 것과 같은 추가적인 프로세싱 태스크를 수행하고 있다. 예를 들어, 기본 쓰레드(902)는 그래픽 동작(908), 그래픽 동작(910), 및 그래픽 동작(912)을 발생한다. 일반적으로, 그래픽 동작들(908, 910, 912)은, 개별 각자의 프로세싱 동작을 통해 발생되는, GUI(906)에 적용될 이산 시각적 변경들을 나타낸다. 그래픽 동작들(908, 910, 912)은 각각, GUI(906)의 동일 그래픽 요소와, 또는 상이한 각자의 그래픽 요소들과 연관될 수 있다. 적어도 일부 실시예에서, 그래픽 동작들은 각각 기본 쓰레드(902)에 의해 발생된 PSP를 나타낼 수 있다.
시나리오(900)의 중앙 부분으로 진행하여, 렌더 쓰레드(904)는 렌더 동작을 완료하고, 따라서 추가적인 렌더링 태스크를 수행하는 데 이용가능하다. 이에 응답하여, 그래픽 동작들(908, 910, 912)은 PSP(914)로 통합된다. 하나 이상의 실시예에 따라, PSP(914)는 그래픽 동작들(908, 910, 912)의 결합을 나타내며, 그리하여 그래픽 동작들 각각에 표시된, GUI(906)에 대한 시각적 변경들이 PSP(914)에서 나타난다.
예를 들어, 그래픽 동작들(908, 910, 912)이 각각 GUI(906)의 동일 그래픽 요소에 영향을 미치는 시나리오를 고려하자. 그래픽 동작(908)은 그래픽 요소의 컬러를 변경하고, 그래픽 동작(910, 912)은 GUI(906) 내의 그래픽 요소의 각자의 병진 이동을 나타낸다. 따라서, PSP(914)는 컬러 변경 뿐만 아니라 병진 이동에 대한 데이터를 포함한다.
시나리오(900)의 하단 부분으로 진행하여, 렌더 쓰레드(904)는 PSP(914)를 검색하고 처리한다. 예를 들어, 렌더 쓰레드(904)는 PSP(914)에 표시된 그래픽 동작들에 기초하여 GUI(906)로 렌더링한다.
따라서, 시나리오(900)는, 하나 이상의 실시예에서, 복수의 그래픽 동작들(예를 들어, PSP들)이 누적될 때(예를 들어, 렌더 쓰레드가 비지 상태일 때), 그래픽 동작들은, 예를 들어 PSP를 통해, 결합된 그래픽 동작으로 통합될 수 있다. 결함된 그래픽 동작은, 각각의 개별 동작에 표시된 시각적 변경들이 디스플레이 결과에 반영되도록 렌더링될 수 있다. 그에 따라, 렌더 쓰레드가 복수의 개별 동작들을 반복할 필요가 없고 단순히 복수의 결합된 동작들을 반영하는 단일 동작을 적용할 수 있다는 점에서, 프로세싱 시간 및 자원이 절약된다.
그래픽 요소에 대한 시각적 변경을 추적하도록 다양한 기술이 채용될 수 있다. 예를 들어, "패칭(patching)" 모델이 이용될 수 있으며, 이는 렌더링 전에 적용될 수 있는 패치로서 시각적 요소에 대한 변경을 특징화한다. 예를 들어, 다음의 예시적인 시나리오를 고려하자.
도 10은 하나 이상의 실시예에 따른 예시적인 구현 시나리오(1000)를 예시한다. 시나리오(1000)는, GUI(1004)에 대한 다양한 프로세싱 태스크를 수행하도록 채용될 수 있는 하나 이상의 상이한 유형의 프로세싱 쓰레드들을 나타내는 기본 쓰레드(1002)를 포함한다. 기본 쓰레드의 예시적인 구현들은 상기에 설명되어 있다.
기본 쓰레드(1002)와 연관된 것은 디스플레이 트리(1006)이며, 이는 GUI(1004)의 양상들을 정의하기 위한 데이터 구조를 나타낸다. 디스플레이 트리(1006)는 예를 들어, GUI(1004)의 다양한 속성들을 정의하는 복수의 노드들을 포함한다. 예를 들어, 디스플레이 트리(1006)의 개별 노드들은, 윈도우, 텍스트 요소, 이미지 요소, 채울 수 있는 필드, 선택할 수 있는 제어 등과 같은, GUI(1004)의 각자의 그래픽 요소들을 정의하는 데이터를 포함할 수 있다.
예를 들어, 디스플레이 트리(1006)는 부모 노드(1008), 자식 노드(1010), 및 자식 노드(1012)를 포함한다. 부모 노드(1008)는 예를 들어 GUI(1004)의 기본 윈도우를 나타낼 수 있다. 자식 노드(1010, 1012)는 기본 윈도우 내의 그래픽 요소들을 나타낸다.
하나 이상의 실시예에 따르면, 기본 쓰레드(1002)는, GUI(1004)에 대한 변경을 표시하도록 디스플레이 트리(1006)에 대한 "패치"를 발생한다. 예를 들어, GUI(1004)의 시각적 속성을 변경하는 이벤트가 일어날 때, 기본 쓰레드(1002)는 변경된 시각적 속성에 대응하는 디스플레이 트리(1006)의 노드에 대한 패치를 발생한다.
예를 들어, 기본 쓰레드(1002)에 의해 처리된 이벤트가 각각 노드(1010, 1012)와 연관된 그래픽 요소들에 대한 변경을 일으킨다고 고려하자. 이벤트의 예는, 사용자 입력, 애니메이션, 컬러 변경, 다른 프로세스에 의해 발생된 이벤트 등을 포함한다. 이벤트에 응답하여, 기본 쓰레드(1002)는 노드(1010)에 대한 패치(1010a), 및 노드(1012)에 대한 패치(1012a)를 발생한다.
노드(1010)는 패치(1010a)에의 링크 및 패치(1010a)에 대한 버전 번호를 포함한다. 패치(1010a)는 패치(1010a)에 대한 버전을 표시하는 패치 버전을 더 포함한다. 예를 들어, 노드(1010)에 대한 복수의 변경들이 일어날 수 있으며, 패치는 각 변경에 대해 발생된다. 각각의 새로운 패치가 발생됨에 따라, 각각의 패치에 대한 버전 번호는 패치의 시퀀스에서 각 패치의 상대 위치를 표시하도록 업데이트될 수 있다. 아래에 상세하게 기재되는 바와 같이, 이는 노드에 대한 변경이 정확하게 렌더링될 수 있게 할 수 있다.
패치(1010a)는 또한, 노드(1010)에 대한 변경을 표시하는 패치 데이터를 포함한다. 패치 데이터는 예를 들어, 그래픽 요소의 이동, 컬러 변경, 크기 변경 등과 같은 변경을 표시할 수 있다. 하나 이상의 실시예에 따라 패치는 다양한 다른 유형의 데이터도 포함할 수 있다.
패치(1010a)와 마찬가지로, 패치(1012a)는 노드 ID 및 패치 버전을 포함한다.
다양한 실시예에 따라, 노드(1010)는 패치(1010a)에의 링크(예를 들어, 포인터)를 포함하고, 노드(1012)는 패치(1012a)에의 링크를 포함한다. 따라서, 쓰레드가 노드에 액세스할 때, 링크의 존재는 그 노드에 대해 패치가 존재함을 나타낸다. 링크는 연관된 패치에 액세스하도록 이어질 수 있다.
적어도 일부 실시예에서, 패치는 속성상 누적이며(cumulative), 그리하여 노드에 대한 후속 변경은 노드에 대한 기존의 패치가 업데이트되게 한다. 그에 따라, 기본 쓰레드(1002)는 부가의 변경을, 패치(1010a) 상의 노드(1010)의 상태에 기초할 수 있다. 아래에 상세하게 기재되는 바와 같이, 예를 들어, 기본 쓰레드(1002)는 노드(1010)의 상태의 부가의 변경을 표시하도록 패치(1010a)의 업데이트된 버전을 발생할 수 있다.
시나리오(1000)의 중앙 부분으로 진행하여, 패치(1010a, 1012a)에 의해 표시된 시각적 변경들이 GUI(1004)에 전파될 것이다. 기본 쓰레드(1002)는 예를 들어, GUI(1004)에 대한 시각적 변경들이 렌더 쓰레드에 의해 적용될 것임을 결정할 수 있다. 그에 따라, 기본 쓰레드(1002)는 패치(1010a, 1012a)를 포함하는 PSP(1014)를 방출한다.
시나리오(1000)의 하단 부분으로 계속해서, 렌더 쓰레드(1016)는 PSP(1014)를 검색하고 처리한다. 예를 들어, 렌더 쓰레드(1016)는 패치(1010a)로부터의 패치 데이터를 노드(1010)에, 그리고 패치(1012a)로부터의 패치 데이터를 노드(1012)에 적용하여, 업데이트된 디스플레이 트리(1018)를 발생한다. 따라서, 노드(1010, 1012)의 데이터는 각각 패치(1010a, 1012a)에 기초하여 업데이트된다. 그 다음, 렌더 쓰레드(1016)는 업데이트된 디스플레이 트리(1018)로부터 읽어들이고, 업데이트된 디스플레이 트리(1018)로부터의 데이터에 기초하여 GUI(1004)로 렌더링한다.
앞서 설명한 시나리오(800)를 참조하여, 개별 그래픽 동작들은, 예를 들어 단일 PSP로서, 단일의 결합된 그래픽 동작으로 통합될 수 있는 패치들로서 구현될 수 있다.
시나리오(1000)에 예시된 바와 같이, 다양한 쓰레드들(예를 들어, 기본 쓰레드(1002) 및 렌더 쓰레드(1016))은 디스플레이 트리의 논리적으로 일관된 뷰를 유지하고, 서로 간섭하지 않고서 디스플레이 트리의 그 각자의 뷰에 기초하여 동작할 수 있다. 기본 쓰레드(1002)는 예를 들어, 필요에 따라 패치들을 생성하며, 그리하여 렌더 쓰레드(1016)는 트리에 대한 임의의 적용되지 않은 패치들에 관계없이 트리의 가장 최근 버전으로부터 읽어들일 수 있다. 따라서, 기본 쓰레드(1002)는 임의의 적용되지 않은 패치들의 맥락으로 디스플레이 트리를 본다. 렌더 쓰레드(1016)가 처리 시간상 앞으로 나아갈 때에, 패치들을 적용하며(예를 들어, PSP들로부터), 그 후에 패치들이 중지될(retired) 수 있다. 따라서, 렌더 쓰레드(1016)는 디스플레이 트리를, 예를 들어 임의의 적용되지 않은 패치들을 포함하지 않는, 그의 가장 최근에 업데이트된 형태로 본다.
다양한 실시예에 따라, 노드는 노드 상태의 변경을 추적하도록 렌더 동작들 사이에(예를 들어, PSP들 사이에) 복수 회 패치될 수 있다. 예를 들어, 다음의 예시적인 시나리오를 고려하자.
도 11은 하나 이상의 실시예에 따른 예시적인 구현 시나리오(1100)를 예시한다. 시나리오(1100)는 렌더링 패스들 사이에 디스플레이 트리에 대한 노드 상태의 업데이트를 추적하도록 패치를 이용하기 위한 예시적인 기술을 나타낸다. 시나리오(1100)는, GUI(1104)의 시각적 속성을 나타내는 디스플레이 트리(1102)를 포함한다.
디스플레이 트리(1102)와 연관된 것은 패치(1106)이며, 이는 GUI(1104)의 시각적 속성에 적용될 상태 변경에 기초하여 발생된다. 예시된 바와 같이, 패치(1106)는 디스플레이 트리(1102)의 노드(1108)에 적용된다.
시나리오(1100)의 중앙 부분으로 진행하여, 이벤트(예를 들어, 프로세싱 이벤트)는 노드(1108)에 적용될 부가의 상태 변경을 표시한다. 그에 따라, 패치(1106)의 패치 데이터는 부가의 상태 변경을 반영하도록 업데이트된다. 적어도 일부 실시예에서, 패치(1106)는 누적이며, 그리하여 노드(1108)에 대한 상태 정보의 복수의 변경들이 패치(1106)의 패치 데이터에 반영된다.
시나리오(1100)의 하단 부분으로 계속해서, 렌더 동작이 GUI(1104)로 수행될 것임을 표시하는 패치(1106)를 포함하는 PSP(1100)가 발생된다. 예를 들어, PSP(1110)는 GUI(1104)에 대해 기본 쓰레드에 의해 발생될 수 있다. GUI(1104)에 대한 렌더 쓰레드는 PSP(1110)를 처리하고 노드(1108)에 패치(1106)를 적용하여 업데이트된 디스플레이 트리(1112)를 발생한다.
패치(1106)와 함께, 디스플레이 트리(1102)의 다른 노드들에 대하여 발생된 다른 패치들이, 업데이트된 디스플레이 트리(1112)를 발생하도록 렌더 쓰레드에 의해 적용될 수 있다. 예를 들어, 다른 패치들로부터의 상태 정보가 각자의 노드들에 적용된다.
적어도 일부 실시예에서, 연관 패치들을 갖는 노드들 리스트가, 예를 들어 PSP(1110)의 일부로서 그리고/또는 PSP(1110)와 별도로 유지된다. 따라서, 순차적(orderly) 방식으로 업데이트된 트리(1112)를 발생하도록 리스트가 채용될 수 있다. 상기 언급된 바와 같이, 노드는 노드에 대한 임의의 패치에의 링크(예를 들어, 포인터)를 포함한다. 따라서, 패치가 발생된 노드의 리스트를 유지하는 것은, 패치될 노드 및 노드에 대한 패치 둘 다 단일 동작으로 위치를 찾을 수 있으므로, 자원의 보다 효율적인 사용을 제공한다.
렌더 쓰레드가 업데이트된 디스플레이 트리(1112)를 발생하도록 PSP(1110)로부터 패치를 적용하는 것이 끝나면, 렌더 쓰레드는 업데이트된 디스플레이 트리(1112)로부터 읽어들이고 GUI(1104)로 렌더링할 수 있다.
다양한 실시예에 따라, 다양한 프로세싱 쓰레드들이 디스플레이 트리의 상이한 버전들을 이용할 수 있다. 예를 들어, 다음의 예시적인 구현 시나리오를 고려하자.
도 12는 하나 이상의 실시예에 따른 예시적인 구현 시나리오(1200)를 예시한다. 시나리오(1200)는 GUI(1204)에 대한 다양한 프로세싱 태스크를 수행하는 기본 쓰레드(1202)를 포함한다. GUI(1004)의 시각적 속성을 나타내는 디스플레이 트리(1206)가 더 예시되어 있다. 디스플레이 트리(1206)는 패치(1208)와 연관되며, 패치(1208)는 디스플레이 트리(1206)의 노드에 대한 상태 정보를 포함한다. 상기에 그리고 아래에 설명되는 바와 같이, 패치(1208)는 GUI(1204)의 시각적 상태에 대한 진행중인 변경을 반영하도록 렌더 동작들 사이에 그리고/또는 렌더 동작들 동안 기본 쓰레드(1202)에 의해 발생되고/발생되거나 업데이트될 수 있다.
시나리오(1200)의 하단 부분으로 진행하여, 기본 쓰레드(1202)에 의해 패치(1208)를 포함하는 PSP(1120)가 방출된다. PSP(120)는, 패치(1208)를 적용하고 GUI(1204)로 렌더링하도록 렌더 쓰레드(1212)에 명령한다. 따라서, 렌더 쓰레드(1212)는 업데이트된 디스플레이 트리(1214)를 발생하도록 패치(1208)를 적용한다. 예를 들어, 디스플레이 트리(1206)의 노드는 패치(1208)로부터의 상태 정보로 업데이트되어, 업데이트된 디스플레이 트리(1214)를 발생할 수 있다.
그 다음, 렌더 쓰레드(1212)는 업데이트된 디스플레이 트리(1214)로부터 데이터를 읽어들이고, 데이터에 기초하여 GUI(1204)로 렌더링한다.
또한, 업데이트된 디스플레이 트리(1214)가 발생된 후에 기본 쓰레드(1202)가 GUI(1204)에 대한 프로세싱을 계속해서 수행하고, 따라서 업데이트된 디스플레이 트리(1214)에 대한 패치(1216)를 발생하는 것이 예시되어 있다. 다양한 실시예에 따라, 기본 쓰레드(1202)는 디스플레이 트리 자체 뿐만 아니라 연관 패치(1216)의 맥락으로 업데이트된 디스플레이 트리(1214)를 보고/보거나 그에 대해 동작한다. 그러나, 렌더 쓰레드(1212)는 업데이트된 디스플레이 트리(1214)에만 액세스하고, 패치(1216)에는 액세스하지 않는다. 또한, 기본 쓰레드(1202)는, 업데이트된 디스플레이 트리(1214)가 발생된 후에 그리고 렌더 쓰레드(1212)가 업데이트된 디스플레이 트리(1214)에 기초하여 렌더링하기를 기다리지 않고서, 프로세싱(예를 들어, 패치(1216) 발생)을 수행하기를 계속할 수 있다.
따라서, 기본 쓰레드(1202)는 GUI(1204)의 시각적 상태에 영향을 미치는 상이한 이벤트에 기초하여 패치를 발생하고/발생하거나 업데이트한다. 렌더 쓰레드(1212)는 이전의 디스플레이 트리 업데이트 이래로 누적된 패치들로 GUI(1204)에 대한 디스플레이 트리를 때때로 업데이트한다. 렌더 쓰레드(1212)는, 업데이트된 디스플레이 트리(1214)와 같은, 디스플레이 트리의 가장 최근의 버전으로부터 렌더링한다. 그에 따라, 렌더 동작들 사이에 GUI(1204)의 시각적 상태의 변경을 추적하도록 패치들이 사용될 수 있고 GUI(1204)에 대한 디스플레이 트리의 렌더링가능 상태를 업데이트하도록 적용될 수 있다.
예시적인 절차
다음의 설명은 하나 이상의 실시예에 따라 그래픽 동작들을 통합하기 위한 일부 예시적인 절차들을 기재한다. 예시적인 절차들은 도 1의 환경(100), 도 16의 시스템(1600), 및/또는 임의의 기타 적합한 환경에서 채용될 수 있다.
도 13은 하나 이상의 실시예에 따른 방법에서의 단계들을 기재한 흐름도이다. 단계 1300은 복수의 그래픽 동작들이 그래픽 요소에 적용될 것임을 결정한다. 그래픽 동작들은 예를 들어, GUI와 같은 그래픽 요소의 시각적 상태에 대한 복수의 변경들에 대응할 수 있다. 예를 들어, 그래픽 동작들은 각각 별개의 이산 데이터 프로세싱 동작을 나타낼 수 있다. 적어도 일부 실시예에서, 그래픽 동작들은 상이한 패치들, 상이한 PSP들 등에 대응할 수 있다.
단계 1302는 복수의 그래픽 동작들을 그래픽 요소에 대한 결합된 그래픽 동작으로 통합한다. 결합된 그래픽 동작은 예를 들어, 복수의 그래픽 동작들 각각으로부터 그래픽 요소의 시각적 상태에 대한 변경들을 반영할 수 있다. 따라서, 결합된 그래픽 동작은 개별 그래픽 동작들 각각의 누적 효과를 나타낼 수 있다. 적어도 일부 실시예에서, 결합된 그래픽 동작은, 예를 들어 개별 그래픽 동작들 각각을 각각 적용하지 않고, 단일 렌더 동작을 통해 적용될 수 있다. 그래픽 동작들을 통합하는 것은, 예를 들어, 패치들 각각으로부터의 상태 정보를 반영하는 업데이트된 디스플레이 트리를 발생하도록 디스플레이 트리에 적용될 수 있는 단일 패치로 복수의 패치들을 결합하는 것을 포함할 수 있다.
다양한 실시예에 따라, 렌더 쓰레드는 이전의 그래픽 동작들을 렌더링하느라 비지 상태일 수 있다. 따라서, 복수의 현재 그래픽 동작들은 렌더 쓰레드가 이용가능하게 되기를 기다리는 동안 큐잉될 수 있다. 예를 들어, 그래픽 동작들에 기초하여 패치들이 발생되고/발생되거나 업데이트될 수 있다. 복수의 그래픽 동작들은 렌더 쓰레드가 부가의 렌더링을 수행하도록 이용가능하게 되었다고 결정하는 것에 응답하여 통합될 수 있다. 패치들의 그룹은 예를 들어, 디스플레이 트리를 업데이트하도록 적용될 수 있는 단일 패치를 발생하도록 결합될 수 있다.
단계 1304는 결합된 그래픽 동작이 렌더링될 것임을 표시하는 프로세싱 명령어를 발생한다. 예를 들어, 결합된 패치가 그래픽 요소에 대한 노드를 업데이트하도록 적용될 것이고 그래픽 요소가 업데이트된 노드에 기초하여 렌더링될 것이라고 그래픽 요소에 대한 렌더 쓰레드에 명령 및/또는 통지될 수 있다. 적어도 일부 실시예에서, 결합된 그래픽 동작을 포함하거나 포인팅하는, 예를 들어 디스플레이 트리를 업데이트하는 데 사용될 패치 및/또는 패치 그룹을 포함하거나 포인팅하는, PSP가 발생될 수 있다.
적어도 일부 실시예에서, 렌더 쓰레드는 디스플레이 트리에 복수의 계류중인(pending) PSP들에 대한 패치들을 적용한 다음, 가장 최근에 적용된 PSP에 기초한 디스플레이 트리로부터 렌더링할 수 있다. 이는 복수의 중간 드로잉 동작을 요구하지 않고서 복수의 PSP들의 최종 시각적 결과가 실현될 수 있게 하며, 따라서 시스템 자원을 절약한다.
도 14는 하나 이상의 실시예에 따른 방법에서의 단계들을 기재하는 흐름도이다. 적어도 일부 실시예에서, 방법은 그래픽 요소에 대한 그래픽 동작들을 통합하는 예시적인 방식을 기재한다.
단계 1400은 그래픽 요소의 시각적 상태에 대한 변경을 기술하는 패치를 발생한다. 패치는 예를 들어, GUI와 같은 그래픽 요소에 대한 트리 구조의 노드에 연관되고/연관되거나 링크될 수 있다. 따라서, 패치는 노드 데이터에 행해질 변경을 기술할 수 있다. 다양한 실시예에서, 패치는 연관 노드와 별개이며, 따라서 패치에 포함된 상태 정보는 패치가 노드에 적용될 때까지 노드의 렌더링가능한 상태에 영향을 미치지 않는다.
단계 1402는 그래픽 요소의 시각적 상태에 대한 변경이 적용될 것임을 결정한다. 예를 들어, 렌더 쓰레드가 변경을 렌더링하도록 이용가능하다는 표시가 수신될 수 있다.
단계 1404는 패치에 기초하여 그래픽 요소에 대한 데이터 구조를 업데이트한다. 상기 설명된 바와 같이, 예를 들어, 패치는 노드에서의 그래픽 데이터가 패치로부터의 그래픽 데이터로 업데이트 및/또는 교체되도록 그래픽 요소에 대한 노드에 적용될 수 있다. 적어도 일부 실시예에서, 디스플레이 트리의 렌더링가능한 업데이트된 버전을 발생하도록 복수의 상이한 패치들이 디스플레이 트리의 각자의 상이한 노드들에 적용될 수 있다.
단계 1406은 업데이트된 데이터 구조에 기초하여 그래픽 요소를 렌더링한다. 예를 들어, 렌더 쓰레드는 업데이트된 데이터 구조로부터 읽어들이고, 업데이트된 데이터 구조에 기초하여 그래픽 요소를 렌더링할 수 있다.
실시예는 기존의 데이터 구조(예를 들어, 기존의 노드)를 업데이트하는 것에 관련하여 여기에 설명되어 있지만, 기술이 새로운 데이터 구조를 발생하는 데 채용될 수 있다는 것을 알아야 할 것이다. 패치는 예를 들어 새로운 노드, 새로운 서브트리 등을 발생하기 위한 명령어를 포함할 수 있다. 따라서, 데이터 구조는 여기에 설명된 기술을 통해 생성되고 업데이트될 수 있다.
도 15는 하나 이상의 실시예에 따른 방법에서의 단계들을 기재하는 흐름도이다. 적어도 일부 실시예에서, 방법은 그래픽 동작들을 통합하기 위해 복수의 쓰레드들을 이용하는 예시적인 방식을 기재한다.
단계 1500은 그래픽 요소의 시각적 상태에 대한 변경을 기술하는 패치들을 발생하도록 제1 쓰레드를 실행한다. 상기 설명된 바와 같이, 예를 들어, GUI에 대한 기본 쓰레드가 GUI에 대한 디스플레이 트리에 대한 패치들을 발생하고/발생하거나 업데이트할 수 있다.
단계 1502는 패치들을 적용하여 그래픽 요소에 대한 데이터 구조를 업데이트하고 업데이트된 데이터 구조에 기초하여 그래픽 요소를 렌더링하도록 제2 쓰레드를 실행한다. 예를 들어, 상기 설명된 바와 같이, GUI에 대한 렌더 쓰레드가 업데이트된 디스플레이 트리를 발생하도록 디스플레이 트리에 패치를 적용하고 디스플레이 트리에 기초하여 GUI의 하나 이상의 부분을 렌더링할 수 있다.
다양한 실시예에 따라, 제1 쓰레드 및 제2 쓰레드는 상이한 각자의 프로세서 코어 상에서 실행될 수 있다. 또한, 단일 쓰레드가 패치를 발생하고 데이터 구조에 적용하는 것으로서 설명되어 있지만, 실시예는 패치를 발생하고 업데이트하고 그리고/또는 데이터 구조에 적용하도록 복수의 상이한 쓰레드들을 채용할 수 있다는 것을 알아야 할 것이다. 추가적으로, 실시예는 디스플레이 트리와 같은 데이터 구조로부터의 렌더링을 위해 복수의 렌더링 쓰레드들을 채용할 수 있다.
일부 예시적인 절차를 설명하였으니, 이제 하나 이상의 실시예에 따른 예시적인 시스템 및 디바이스의 설명을 고려하자.
예시적인 시스템 및 디바이스
도 16은 전반적으로 1600인 예시적인 시스템을 예시하며, 이는 여기에 기재된 다양한 기술을 구현할 수 있는 하나 이상의 컴퓨팅 시스템 및/또는 디바이스를 나타내는 예시적인 컴퓨팅 디바이스(1602)를 포함한다. 예를 들어, 도 1에 관련하여 상기 설명된 컴퓨팅 디바이스(102)가 컴퓨팅 디바이스(1602)로서 구현될 수 있다. 컴퓨팅 디바이스(1602)는 예를 들어, 서비스 프로바이더의 서버, 클라이언트와 연관된 디바이스(예를 들어, 클라이언트 디바이스), 온칩 시스템, 및/또는 임의의 기타 적합한 컴퓨팅 디바이스 또는 컴퓨팅 시스템일 수 있다.
예시된 바와 같은 예시적인 컴퓨팅 디바이스(1602)는 프로세싱 시스템(1604), 하나 이상의 컴퓨터 판독가능한 매체(1606), 및 하나 이상의 입력/출력(I/O; Input/Output) 인터페이스(1608)를 포함하며, 이들은 서로 통신가능하게 연결된다. 도시되지 않았지만, 컴퓨팅 디바이스(1602)는 다양한 컴포넌트들을 서로 연결하는 시스템 버스 또는 기타 데이터 및 커맨드 전송 시스템을 더 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 컨트롤러, 주변장치 버스, USB, 및/또는 임의의 다양한 버스 아키텍처를 이용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조들의 임의의 하나 또는 조합을 포함할 수 있다. 제어 및 데이터 라인과 같은 다양한 다른 예들도 또한 고려해볼 수 있다.
프로세싱 시스템(1604)은 하드웨어를 사용하여 하나 이상의 동작들을 수행하는 기능성을 나타낸다. 그에 따라, 프로세싱 시스템(1604)은, 프로세서, 기능 블록 등으로서 구성될 수 있는 하드웨어 요소(1610)를 포함하는 것으로서 예시된다. 이는, 하나 이상의 반도체를 사용하여 형성된 ASIC(application specific integrated circuit) 또는 기타 로직 디바이스로서의 하드웨어의 구현을 포함할 수 있다. 하드웨어 요소(1610)는 그것들이 형성되는 재료 또는 그에 채용된 프로세싱 메커니즘에 의해 한정되지 않는다. 예를 들어, 프로세서는 반도체(들) 및/또는 트랜지스터(예를 들어, 전자 집적 회로(IC))로 구성될 수 있다. 이러한 맥락에서, 프로세서 실행가능한 명령어는 전자적으로 실행가능한 명령어일 수 있다.
컴퓨터 판독가능한 매체(1606)는 메모리/저장장치(1612)를 포함하는 것으로서 예시되어 있다. 메모리/저장장치(1612)는 하나 이상의 컴퓨터 판독가능한 매체와 연관된 메모리/저장 용량을 나타낸다. 메모리/저장장치(1612)는 (랜덤 액세스 메모리(RAM; random access memory)와 같은) 휘발성 매체 및/또는 (판독 전용 메모리(ROM; read only memory), 플래시 메모리, 광학 디스크, 자기 디스크 등과 같은) 비휘발성 매체를 포함할 수 있다. 메모리/저장장치(1612)는 고정식 매체(예를 들어, RAM, ROM, 고정식 하드 드라이브 등) 뿐만 아니라 이동식 매체(예를 들어, 플래시 메모리, 이동식 하드 드라이브, 광학 디스크 등)를 포함할 수 있다. 컴퓨터 판독가능한 매체(1606)는 아래에 더 기재되는 바와 같은 다양한 다른 방식으로 구성될 수 있다.
입력/출력 인터페이스(들)(1608)는, 다양한 입력/출력 디바이스를 사용하여 사용자가 컴퓨팅 디바이스(1602)에 커맨드 및 정보를 입력할 수 있게 해주고 또한 사용자 및/또는 기타 컴포넌트 또는 디바이스에 정보가 제시될 수 있게 해주는 기능성을 나타낸다. 입력 디바이스의 예는, 키보드, 커서 제어 디바이스(예를 들어, 마우스), 마이크(예를 들어, 음성 인식 및/또는 음성 입력용), 스캐너, 터치 기능성(예를 들어, 물리적 터치를 검출하도록 구성되는 용량성 또는 기타 센서), 카메라(예를 들어, 제스처로서 터치를 수반하지 않는 움직임을 검출하도록 적외선 주파수와 같은 가시광 또는 비가시광 파장을 채용할 수 있음) 등을 포함한다. 출력 디바이스의 예는, 디스플레이 디바이스(예를 들어, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드, 촉각 응답 디바이스 등을 포함한다. 따라서, 컴퓨팅 디바이스(1602)는 사용자 상호작용을 지원하기 위해 아래에 더 기재되는 바와 같은 다양한 방식으로 구성될 수 있다.
다양한 기술들이 일반적으로 소프트웨어, 하드웨어 요소, 또는 프로그램 모듈의 맥락으로 여기에 기재될 수 있다. 일반적으로, 이러한 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 객체, 요소, 컴포넌트, 데이터 구조 등을 포함한다. 여기에서 사용되는 용어 "모듈", "기능성", "컴포넌트"는 일반적으로 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다. 여기에 기재된 기술의 특징은 플랫폼 독립적(platform-independent)이며, 이는 다양한 프로세서를 갖는 다양한 상업용 컴퓨팅 플랫폼 상에서 기술이 구현될 수 있다는 것을 의미한다.
기재된 모듈 및 기술의 구현은 어떤 형태의 컴퓨터 판독가능한 매체 상에 저장되거나 이에 걸쳐 전송될 수 있다. 컴퓨터 판독가능한 매체는 컴퓨팅 디바이스(1602)에 의해 액세스될 수 있는 다양한 매체를 포함할 수 있다. 예로써 비한정적으로, 컴퓨터 판독가능한 매체는 "컴퓨터 판독가능한 저장 매체" 및 "컴퓨터 판독가능한 신호 매체"를 포함할 수 있다.
"컴퓨터 판독가능한 저장 매체"는, 순전히 신호 전송, 반송파 또는 신호 자체와 달리, 정보의 지속적인 저장을 가능하게 하는 매체 및/또는 디바이스를 지칭할 수 있다. 따라서, 컴퓨터 판독가능한 저장 매체는 신호 자체를 포함하지 않는다. 컴퓨터 판독가능한 저장 매체는, 컴퓨터 판독가능한 명령어, 데이터 구조, 프로그램 모듈, 로직 요소/회로, 또는 기타 데이터와 같은 정보의 저장에 적합한 방법 또는 기술로 구현된 휘발성 및 비휘발성, 이동식 및 비이동식 매체 및/또는 저장 디바이스와 같은 하드웨어를 포함한다. 컴퓨터 판독가능한 저장 매체의 예는, RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD 또는 기타 광학 저장장치, 하드 디스크, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 기타 자기 저장 디바이스, 또는 컴퓨터에 의해 액세스될 수 있으며 원하는 정보를 저장하기에 적합한 기타 저장 디바이스, 유형의(tangible) 매체, 또는 제조 물품을 포함할 수 있지만, 이에 한정되는 것은 아니다.
"컴퓨터 판독가능한 신호 매체"는, 예를 들어 네트워크를 통해, 컴퓨팅 디바이스(1602)의 하드웨어에 명령어를 전송하도록 구성되는 신호 베어링 매체를 지칭할 수 있다. 신호 매체는 통상적으로, 컴퓨터 판독가능한 명령어, 데이터 구조, 프로그램 모듈, 또는 기타 데이터를 반송파, 데이터 신호 또는 기타 수송 메커니즘과 같은 변조 데이터 신호로 구현할 수 있다. 신호 매체는 또한 임의의 정보 전달 매체를 포함할 수 있다. 용어 "변조 데이터 신호"는, 신호에 정보를 인코딩하는 방식으로 그의 특성 중의 하나 이상이 설정되거나 변경된 신호를 의미한다. 예로써 비한정적으로, 통신 매체는, 유선 네트워크나 다이렉트 유선 접속과 같은 유선 매체, 그리고 음향, 무선 주파수(RF; radio frequency), 및 기타 무선 매체와 같은 무선 매체를 포함한다.
앞서 기재된 바와 같이, 하드웨어 요소(1610) 및 컴퓨터 판독가능한 매체(1606)는, 여기에 기재된 기술의 적어도 일부 양상을 구현하도록 일부 실시예에서 채용될 수 있는 하드웨어 형태로 구현된 명령어, 모듈, 프로그램가능 디바이스 로직 및/또는 고정 디바이스 로직을 나타낸다. 하드웨어 요소는, 집적 회로 또는 온칩 시스템의 컴포넌트, ASIC, FPGA(field-programmable gate array), CPLD(complex programmable logic device), 및 실리콘 또는 기타 하드웨어 디바이스의 다른 구현을 포함할 수 있다. 이에 관련하여, 하드웨어 요소는, 하드웨어 요소에 의해 구현된 명령어, 모듈 및/또는 로직에 의해 정의된 프로그램 태스크들을 수행하는 프로세싱 디바이스 뿐만 아니라, 실행을 위한 명령어를 저장하는 데 이용되는 하드웨어 디바이스, 예를 들어 앞서 기재된 컴퓨터 판독가능한 저장 매체로서 동작할 수 있다.
전술한 바의 조합들이 또한, 여기에 기재된 다양한 기술 및 모듈을 구현하도록 채용될 수 있다. 그에 따라, 소프트웨어, 하드웨어, 또는 프로그램 모듈 및 기타 프로그램 모듈은, 하나 이상의 하드웨어 요소(1610)에 의해 그리고/또는 어떤 형태의 컴퓨터 판독가능한 저장 매체 상에 구현된 하나 이상의 명령어 및/또는 로직으로서 구현될 수 있다. 컴퓨팅 디바이스(1602)는 소프트웨어 및/또는 하드웨어 모듈에 대응하는 특정 명령어 및/또는 기능을 구현하도록 구성될 수 있다. 그에 따라, 소프트웨어로서 컴퓨팅 디바이스(1602)에 의해 실행가능한 모듈의 구현은, 적어도 부분적으로 하드웨어로, 예를 들어 프로세싱 시스템의 하드웨어 요소(1610) 및/또는 컴퓨터 판독가능한 저장 매체의 사용을 통해, 달성될 수 있다. 명령어 및/또는 기능은, 여기에 기재된 기술, 모듈 및 예를 구현하도록 하나 이상의 제조 물품(예를 들어, 하나 이상의 컴퓨팅 디바이스(1602) 및/또는 프로세싱 시스템(1604))에 의해 실행가능/동작가능할 수 있다.
도 16에 더 예시된 바와 같이, 예시적인 시스템(1600)은 개인용 컴퓨터(PC), 텔레비전 디바이스, 및/또는 이동 디바이스 상에서 애플리케이션을 실행할 때 끊김없는 사용자 경험을 위한 유비쿼터스(ubiquitous) 환경을 가능하게 한다. 애플리케이션을 이용하거나 비디오 게임을 플레이하거나 비디오를 보거나 등등인 동안, 하나의 디바이스로부터 다음 디바이스로 전환할 때 공통인 사용자 경험을 위해 서비스 및 애플리케이션은 모든 세 가지 환경에서 실질적으로 유사하게 실행된다.
예시적인 시스템(1600)에서, 복수의 디바이스들은 중앙 컴퓨팅 디바이스를 통해 상호접속된다. 중앙 컴퓨팅 디바이스는 복수의 디바이스들에 로컬일 수 있거나, 복수의 디바이스들로부터 원격으로 위치될 수 있다. 하나의 실시예에서, 중앙 컴퓨팅 디바이스는 네트워크, 인터넷, 또는 다른 데이터 통신 링크를 통해 복수의 디바이스들에 접속되어 있는 하나 이상의 서버 컴퓨터들의 클라우드일 수 있다.
하나의 실시예에서, 이 상호접속 아키텍처는, 복수의 디바이스들의 사용자에게 공통이며 끊김없는 경험을 제공하도록 기능성들이 복수의 디바이스들에 걸쳐 전달될 수 있게 한다. 복수의 디바이스들 각각은 상이한 물리적 요건 및 능력을 가질 수 있고, 중앙 컴퓨팅 디바이스는, 디바이스에 맞춤화되며 모든 디바이스들에 공통이기도 한, 디바이스에의 경험의 전달을 가능하게 하는 플랫폼을 사용한다. 하나의 실시예에서, 타겟 디바이스들의 클래스(class)가 생성되고, 경험들이 디바이스들의 일반 클래스에 맞춤화된다. 디바이스 클래스는 디바이스들의 물리적 특징, 사용 유형, 또는 기타 공통 특성에 의해 정의될 수 있다.
다양한 구현에서, 컴퓨팅 디바이스(1602)는 컴퓨터(1614), 모바일(1616), 텔레비전(1618) 용도를 위한 것과 같은 다양한 상이한 구성을 가정할 수 있다. 이들 구성의 각각은 일반적으로 상이한 구성 및 능력을 가질 수 있는 디바이스들을 포함하고, 따라서 컴퓨팅 디바이스(1602)는 상이한 디바이스 클래스들 중의 하나 이상에 따라 구성될 수 있다. 예를 들어, 컴퓨팅 디바이스(1602)는, 개인용 컴퓨터, 데스크톱 컴퓨터, 멀티스크린 컴퓨터, 랩톱 컴퓨터, 넷북 등을 포함하는, 디바이스의 컴퓨터(1614) 클래스로서 구현될 수 있다.
컴퓨팅 디바이스(1602)는 또한, 이동 전화, 휴대용 뮤직 플레이어, 휴대용 게임 디바이스, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등과 같은 이동 디바이스를 포함하는, 디바이스의 모바일(1616) 클래스로서 구현될 수 있다. 컴퓨팅 디바이스(1602)는 또한, 평범한 시청 환경에서 일반적으로 더 큰 화면을 갖거나 그에 연결되는 디바이스를 포함하는, 디바이스의 텔레비전(1618) 클래스로서 구현될 수 있다. 이들 디바이스는 텔레비전, 셋톱 박스, 게임 콘솔 등을 포함한다.
여기에 기재된 기술은 컴퓨팅 디바이스(1602)의 이들 다양한 구성에 의해 지원될 수 있으며, 여기에 기재된 기술의 특정 예에 한정되지 않는다. 예를 들어, 프로세스 매니저 모듈(110) 및/또는 그래픽 모듈(112)에 관련하여 설명된 기능성은, 전부 또는 부분적으로, 아래에 기재된 바와 같이 플랫폼(1622)을 통해 "클라우드"(1620)를 통한 것과 같은, 분산 시스템의 사용을 통해 구현될 수 있다.
클라우드(1620)는 자원(1624)을 위한 플랫폼(1622)을 포함하고/포함하거나 나타낸다. 플랫폼(1622)은 클라우드(1620)의 하드웨어(예를 들어, 서버)와 소프트웨어 자원의 기본적인 기능성을 추상화한다. 자원(1624)은 컴퓨팅 디바이스(1602)로부터 원격인 서버 상에서 컴퓨터 프로세싱이 실행되는 동안 이용될 수 있는 애플리케이션 및/또는 데이터를 포함할 수 있다. 자원(1624)은 또한, 셀룰러 또는 와이파이 네트워크와 같은 가입자 네트워크를 통해 그리고/또는 인터넷을 통해 제공되는 서비스를 포함할 수 있다.
플랫폼(1622)은 컴퓨팅 디바이스(1602)를 다른 컴퓨팅 디바이스와 접속시킬 자원 및 기능을 추상화할 수 있다. 플랫폼(1622)은 또한, 플랫폼(1622)을 통해 구현되는 자원(1624)에 대해 부딪히는 요구에 대응하는 레벨의 스케일을 제공하기 위해 자원의 스케일링을 추상화하도록 도울 수 있다. 그에 따라, 상호접속된 디바이스 실시예에서, 여기에 기재된 기능성의 구현이 시스템(1600) 전반에 걸쳐 분산될 수 있다. 예를 들어, 기능성이 부분적으로 컴퓨팅 디바이스(1602) 상에서 구현될 수 있고, 그 뿐만 아니라 클라우드(1620)의 기능성을 추상화하는 플랫폼(1622)을 통해 구현될 수 있다.
여기에 설명된 기술들을 수행하도록 구현될 수 있는 다수의 방법들이 여기에 설명되어 있다. 방법의 양상은 하드웨어, 펌웨어, 또는 소프트웨어, 또는 이들의 조합으로 구현될 수 있다. 방법은 하나 이상의 디바이스에 의해 수행되는 동작을 명시하는 단계들의 세트로서 도시되어 있고, 반드시 각자의 블록에 의한 동작을 수행하기 위해 도시된 순서에 한정되는 것은 아니다. 또한, 특정 방법에 관련하여 도시된 동작은 하나 이상의 구현에 따라 상이한 방법의 동작과 결합 및/또는 상호변경될 수 있다. 방법의 양상은 환경(100)에 관련하여 상기에 설명된 다양한 엔티티들 사이의 상호동작을 통해 구현될 수 있다.
결론
그래픽 동작들을 통합하기 위한 기술이 기재된다. 실시예들이 구조적 특징 및/또는 방법 동작에 특정한 언어로 기재되어 있지만, 첨부된 청구항에 정의된 실시예들이 반드시 기재된 특정 특징 또는 동작에 한정되는 것은 아님을 이해하여야 한다. 오히려, 특정 특징 및 동작은 청구된 실시예를 구현하는 예시적인 형태로서 개시된 것이다.

Claims (10)

  1. 시스템에 있어서,
    적어도 하나의 프로세서; 및
    명령어들이 저장되어 있는 하나 이상의 컴퓨터 판독가능한 저장 매체를 포함하고,
    상기 명령어들은, 상기 적어도 하나의 프로세서에 의한 실행에 응답하여, 상기 시스템으로 하여금,
    복수의 상이한 프로세싱 동작들을 통해 발생된 복수의 그래픽 동작들이 그래픽 요소(graphical element)에 적용될 것임을 결정하는 단계; 및
    상기 복수의 그래픽 동작들을, 상기 그래픽 요소에 단일 렌더(render) 동작을 통해 실행가능한, 결합된 그래픽 동작으로 통합하는(coalescing) 단계
    를 포함한 동작들을 수행하게 하는 것인 시스템.
  2. 청구항 1에 있어서, 상기 그래픽 요소는 그래픽 사용자 인터페이스(GUI; graphical user interface)를 포함하고, 상기 통합하는 단계는 상기 복수의 그래픽 동작들로부터의 데이터를 상기 GUI에 대한 데이터 구조에 적용하는 것을 포함하는 것인 시스템.
  3. 청구항 1에 있어서, 상기 통합하는 단계는, 상기 복수의 그래픽 동작들 각각으로부터의 시각적 상태 정보를, 상기 그래픽 요소에 대한 결합된 시각적 상태로 결합하는 단계를 포함하는 것인 시스템.
  4. 청구항 1에 있어서, 상기 통합하는 단계는, 상기 결합된 그래픽 동작에 대한 동기점(synchronization point)을 발생하는 단계, 및 렌더링 쓰레드(rendering thread)에 의한 프로세싱을 위해 상기 동기점을 방출하는(emit) 단계를 포함하는 것인 시스템.
  5. 청구항 1에 있어서, 상기 복수의 그래픽 동작들은 상기 그래픽 요소에 대한 디스플레이 트리(display tree)의 노드에 대한 패치(patch)에 의해 표현되고, 상기 통합하는 단계는 상기 패치를 상기 노드에 적용하는 단계를 포함하는 것인 시스템.
  6. 명령어들이 저장되어 있는 하나 이상의 컴퓨터 판독가능한 저장 매체에 있어서,
    상기 명령어들은, 컴퓨팅 디바이스에 의한 실행에 응답하여, 상기 컴퓨팅 디바이스로 하여금,
    그래픽 요소의 시각적 상태에 대한 변경을 기술하는(describe) 패치를 발생하는 단계;
    상기 그래픽 요소의 시각적 상태에 대한 변경이 상기 그래픽 요소에 적용될 것임을 결정하는 단계; 및
    업데이트된 데이터 구조에 기초하여 상기 그래픽 요소가 렌더링가능하게 되도록, 상기 패치에 기초하여 상기 그래픽 요소에 대한 데이터 구조를 업데이트하는 단계
    를 포함한 동작들을 수행하게 하는 것인 하나 이상의 컴퓨터 판독가능한 저장 매체.
  7. 청구항 6에 있어서, 상기 데이터 구조는 디스플레이 트리를 포함하고, 상기 패치는 상기 디스플레이 트리의 노드에 대하여 발생되고, 상기 업데이트하는 단계는 상기 패치로부터의 상태 정보에 기초하여 상기 노드를 업데이트하는 단계를 포함하는 것인 하나 이상의 컴퓨터 판독가능한 저장 매체.
  8. 청구항 6에 있어서, 상기 동작들은, 상기 데이터 구조를 업데이트하는 단계 전에 상기 그래픽 요소의 시각적 상태에 대한 후속 변경을 반영하도록 상기 패치를 업데이트하는 단계를 더 포함하는 것인 하나 이상의 컴퓨터 판독가능한 저장 매체.
  9. 컴퓨터 구현 방법에 있어서,
    그래픽 요소의 시각적 상태에 대한 변경을 기술하는 패치들을 발생하도록 제1 프로세서 코어를 통해 제1 쓰레드를 실행하는 단계; 및
    상기 패치들을 적용하여 상기 그래픽 요소에 대한 데이터 구조를 업데이트하고 상기 업데이트된 데이터 구조에 기초하여 상기 그래픽 요소를 렌더링하도록 제2 프로세서 코어를 통해 제2 쓰레드를 실행하는 단계를 포함하는 컴퓨터 구현 방법.
  10. 청구항 9에 있어서, 상기 패치들은 상기 그래픽 요소에 적용될 상이한 그래픽 동작들에 대응하고, 상기 패치들을 적용하도록 상기 제2 쓰레드를 실행하는 단계는, 상기 상이한 그래픽 동작들을, 상기 제2 쓰레드를 통해 렌더링될 결합된 그래픽 동작으로 통합하는 단계를 포함하는 것인 컴퓨터 구현 방법.
KR1020167000784A 2013-06-14 2013-09-20 그래픽 동작들 통합 KR102121641B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/918,825 US9633408B2 (en) 2013-06-14 2013-06-14 Coalescing graphics operations
US13/918,825 2013-06-14
PCT/US2013/060756 WO2014200528A1 (en) 2013-06-14 2013-09-20 Coalescing graphics operations

Publications (2)

Publication Number Publication Date
KR20160019526A true KR20160019526A (ko) 2016-02-19
KR102121641B1 KR102121641B1 (ko) 2020-06-17

Family

ID=49293888

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167000784A KR102121641B1 (ko) 2013-06-14 2013-09-20 그래픽 동작들 통합

Country Status (5)

Country Link
US (1) US9633408B2 (ko)
EP (1) EP3008697B1 (ko)
KR (1) KR102121641B1 (ko)
CN (1) CN105324795B (ko)
WO (1) WO2014200528A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430808B2 (en) * 2013-06-19 2016-08-30 Microsoft Technology Licensing, Llc Synchronization points for state information
CN105069095B (zh) * 2015-08-06 2020-02-07 北京奇艺世纪科技有限公司 图片加载方法、装置和系统
CN111611031A (zh) * 2019-02-26 2020-09-01 华为技术有限公司 一种图形绘制方法和电子设备
CN117616385A (zh) * 2022-06-20 2024-02-27 北京小米移动软件有限公司 视图显示方法、装置、电子设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040249617A1 (en) * 2003-06-03 2004-12-09 Pccw-Hkt Datacom Services Limited Selective, pregressive transmission of 3D geometry models with the pre-ordered hierarchical meshes
US20100287553A1 (en) * 2009-05-05 2010-11-11 Sap Ag System, method, and software for controlled interruption of batch job processing
KR20120054027A (ko) * 2009-07-27 2012-05-29 어드밴스드 마이크로 디바이시즈, 인코포레이티드 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3417392B2 (ja) 2000-09-08 2003-06-16 ヤマハ株式会社 同期制御装置
US6823518B1 (en) 2000-10-17 2004-11-23 Microsoft Corporation Threading and communication architecture for a graphical user interface
US7228500B2 (en) 2003-06-13 2007-06-05 Microsoft Corporation Web page rendering priority mechanism
US7992093B2 (en) 2004-02-25 2011-08-02 Beptech Inc. Method of programming a processing system
CN101243473A (zh) * 2005-06-29 2008-08-13 高通股份有限公司 用于嵌入式装置中的3d内容的离线优化管线
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
US20120151408A1 (en) 2008-11-26 2012-06-14 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
US9245371B2 (en) 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US20110298787A1 (en) 2010-06-02 2011-12-08 Daniel Feies Layer composition, rendering, and animation using multiple execution threads
US20120159363A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Z-order bands
US8589950B2 (en) 2011-01-05 2013-11-19 Blackberry Limited Processing user input events in a web browser
CN102682463B (zh) * 2011-03-18 2014-05-21 同济大学 基于Web Pseudo-3D的大规模数据可视化处理方法
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
EP2584463B1 (en) 2011-10-18 2017-09-13 BlackBerry Limited Method of rendering a user interface
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
US9430808B2 (en) 2013-06-19 2016-08-30 Microsoft Technology Licensing, Llc Synchronization points for state information

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040249617A1 (en) * 2003-06-03 2004-12-09 Pccw-Hkt Datacom Services Limited Selective, pregressive transmission of 3D geometry models with the pre-ordered hierarchical meshes
US20100287553A1 (en) * 2009-05-05 2010-11-11 Sap Ag System, method, and software for controlled interruption of batch job processing
KR20120054027A (ko) * 2009-07-27 2012-05-29 어드밴스드 마이크로 디바이시즈, 인코포레이티드 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법

Also Published As

Publication number Publication date
CN105324795A (zh) 2016-02-10
WO2014200528A1 (en) 2014-12-18
EP3008697A1 (en) 2016-04-20
US9633408B2 (en) 2017-04-25
US20140368515A1 (en) 2014-12-18
EP3008697B1 (en) 2017-10-25
KR102121641B1 (ko) 2020-06-17
CN105324795B (zh) 2018-09-07

Similar Documents

Publication Publication Date Title
US10691299B2 (en) Display of hierarchical datasets using high-water mark scrolling
US9292177B2 (en) Progress bar with feature availability indicator
KR102108583B1 (ko) 인스턴스화가능한 제스처 객체
US10545749B2 (en) System for cloud computing using web components
US9430808B2 (en) Synchronization points for state information
US9069829B2 (en) Data items manager
US10970052B2 (en) System and method for enhancing component based development models with auto-wiring
WO2012122376A2 (en) Device specific handling of user interface components
US20140281892A1 (en) System and method for web content presentation management
US10712913B2 (en) Event-based architecture for expand-collapse operations
US20190080017A1 (en) Method, system, and device that invokes a web engine
KR102121641B1 (ko) 그래픽 동작들 통합
CA2983248C (en) Rendering graphical assets natively on multiple screens of electronic devices
US20140344325A1 (en) Asynchronous content updates in the background for improved application performance
JP2017084344A (ja) 対話型文書の生成および配信
US20120216132A1 (en) Embedding User Selected Content In A Web Browser Display
US11023098B2 (en) Rendering on a mobile device
US20230385363A1 (en) Web site preview generation based on web site type
US20180210717A1 (en) Time Integrated Development and Modification System
US20160147741A1 (en) Techniques for providing a user interface incorporating sign language
US11874890B2 (en) Multi-entry point navigation for user interfaces

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant