KR101144694B1 - 원격 디스플레이로의 전송을 위해 프레임버퍼를 복제하기 위한 방법 및 시스템 - Google Patents
원격 디스플레이로의 전송을 위해 프레임버퍼를 복제하기 위한 방법 및 시스템 Download PDFInfo
- Publication number
- KR101144694B1 KR101144694B1 KR1020100037633A KR20100037633A KR101144694B1 KR 101144694 B1 KR101144694 B1 KR 101144694B1 KR 1020100037633 A KR1020100037633 A KR 1020100037633A KR 20100037633 A KR20100037633 A KR 20100037633A KR 101144694 B1 KR101144694 B1 KR 101144694B1
- Authority
- KR
- South Korea
- Prior art keywords
- framebuffer
- data structure
- display
- entries
- primary
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/001—Arbitration of resources in a display system, e.g. control of access to frame buffer by video controller and/or main processor
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/39—Control of the bit-mapped memory
- G09G5/395—Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/39—Control of the bit-mapped memory
- G09G5/399—Control of the bit-mapped memory using two or more bit-mapped memories, the operations of which are switched in time, e.g. ping-pong buffers
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2310/00—Command of the display device
- G09G2310/04—Partial updating of the display screen
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2350/00—Solving problems of bandwidth in display systems
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/04—Display device controller operating with a plurality of display units
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/18—Use of a frame buffer in a display terminal, inclusive of the display panel
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/39—Control of the bit-mapped memory
- G09G5/395—Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
- G09G5/397—Arrangements specially adapted for transferring the contents of two or more bit-mapped memories to the screen simultaneously, e.g. for mixing or overlay
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Computer Graphics (AREA)
- Controls And Circuits For Display Device (AREA)
- Digital Computer Display Output (AREA)
- Computer And Data Communications (AREA)
- Facsimiles In General (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
원격 데스크탑 서버는 디스플레이 인코더를 포함하며, 그 디스플레이 인코더는, 인코딩되어 원격 클라이언트 디스플레이에 송신될 디스플레이 데이터를 포함하는 2차 프레임버퍼를 보유한다. 디스플레이 인코더는 2차 프레임버퍼의 디스플레이 데이터를 업데이트시키기 위한 요청을 비디오 어댑터 드라이버에 제출하며, 그 비디오 어댑터 드라이버는, 원격 데스크탑 서버 상에서 구동하는 애플리케이션들로부터 수신된 드로잉 명령에 따라 업데이트되는 디스플레이 데이터를 가진 1차 프레임버퍼에 액세스한다. 비디오 어댑터 드라이버는 공간 데이터 구조를 이용하여, 1차 프레임버퍼의 영역들에 위치한 디스플레이 데이터에 대해 행해진 변경들을 추적하고, 1차 프레임버퍼의 그 영역들 내의 디스플레이 데이터를 2차 프레임버퍼 내의 대응 영역에 복제한다.
Description
본 출원은 본 출원과 동일자로 출원된 발명의 명칭: "Method and System for Identifying Drawing Primitives for Selective Transmission to a Remote Display"(대리인 파일 번호: A335)의 미국특허출원과 관련된 출원이며, 그 내용은 본 발명에서 참고로서 포함된다.
현재의 운영 시스템은 모니터와 같은 디스플레이 상에 드로잉을 렌더링하기 위해 애플리케이션에 의해 액세스되는 그래픽 드로잉 인터페이스 레이어를 포함하는 것이 일반적이다. 그래픽 드로잉 인터페이스 레이어는 애플리케이션에 드로잉용 애플리케이션 프로그래밍 인터페이스(API)를 제공하고, 이러한 애플리케이션에 의한 드로잉 요청을 일 세트의 드로잉 명령으로 변환하며, 그 후, 비디오 어댑터 드라이버에 이 명령이 제공된다. 차례로, 비디오 어댑터 드라이버는 드로잉 명령을 수신하고, 이를 비디오 어댑터 특정 드로잉 프리미티브 (drawing primitive) 들로 변역하고, 이 프리미티브들을 비디오 어댑터(가령, 그래픽 카드, 일체형 비디오 칩셋, 등)에 포워딩한다. 비디오 어댑터는 드로잉 프리미티브들을 수신하여 이들을 즉시 프로세싱하거나, 대안적으로, 이들을 순차적 실행을 위해 선입선출(FIFO) 버퍼에 저장하여 비디오 어댑터내의 프레임버퍼를 업데이트시키며, 이러한 프레임버퍼는 비디오 신호를 생성하여 연결된 외부 디스플레이에 전송한다. 이러한 그래픽 드로잉 인터페이스 레이어의 한가지 예는 Microsoft Windows 운영 시스템(OS)의 그래픽 디바이스 인터페이스(GDI)이며, 이는 윈도우즈 OS를 통해 액세스가능한 다수의 사용자-레벨 및 커널-레벨 동적-링크 라이브러리로서 구현된다.
서버 기반 컴퓨팅(SBC) 및 가상 데스크탑 인프라구조(VDI)와 같은 기술들이 등장함에 따라, 조직들은 데이터 센터의 원격 데스크탑 서버들 (또는 그 상에서 구동하는 가상머신들) 상에 호스팅되는 데스크탑들의 인스턴스들로 기존의 퍼스널 컴퓨터(PC)들을 대체할 수 있다. 사용자의 단말기 상에 인스톨된 씬(thin) 클라이언트 애플리케이션이 원격 데스크탑 서버에 연결되며, 이 원격 데스크탑 서버는 사용자의 단말기의 디스플레이 상에 렌더링하기 위한 운영 시스템 세션의 그래픽 사용자 인터페이스를 송신한다. 이러한 원격 데스크탑 서버 시스템의 한가지 예가 가상 컴퓨팅 네트워크(VNC)이며, 이 네트워크는 원격 프레임버퍼(RFB) 프로토콜을 이용하여 원격 데스크탑 서버로부터 클라이언트로 (스크린 상에 디스플레이될 모든 픽셀에 대한 값들을 포함하는) 프레임버퍼를 송신한다. 씬 클라이언트 애플리케이션에 송신되는 그래픽 사용자 인터페이스에 관한 디스플레이 데이터의 양을 감소시키기 위해, 원격 데스크탑 서버는 프레임버퍼의 이전 상태를 반영하는 프레임버퍼의 제 2 사본을 보유할 수도 있다. 이러한 제 2 사본은 원격 데스크탑 서버로 하여금 프레임버퍼의 이전 상태와 현 상태를 비교하여, (네트워크 전송 대역폭 감소를 위해) 인코딩할 디스플레이 데이터 차이를 식별할 수 있게 하고, 이어서, 씬 클라이언트 애플리케이션에 대한 네트워크로 송신할 수 있게 된다.
그러나, 이러한 2차 프레임버퍼에게로 프레임버퍼를 복제하는 연산 오버헤드는, 원격 데스크탑 서버의 성능을 매우 열화시킬 수 있다. 가령, 24비트/화소의 칼라 깊이와 1920 x 1200 해상도를 지원하는 프레임버퍼로부터 초당 60회로 2차 프레임버퍼에 데이터를 계속적으로 복제하기 위해서는 3.09Gb/s 이상의 복제 용량이 요구될 것이다.
디스플레이 데이터는 원격 클라이언트 단말기에 송신될 때 대역폭 요건을 감소시키도록 조작된다. 일실시예에서, 서버는 디스플레이 데이터 저장을 위한 1차 프레임버퍼와, 원격 클라이언트 단말기에 디스플레이 데이터를 송신하기 위해 2차 프레임버퍼를 이용하는 디스플레이 인코더를 갖는다. 1차 프레임버퍼의 디스플레이 데이터에 대한 업데이트들을 포함하는 바운딩 박스가 식별되고, 데이터 구조에서 바운딩 박스에 대응하는 엔트리들이 마킹된다. 데이터 구조의 각각의 엔트리는 1차 프레임버퍼의 서로 다른 영역에 대응하며, 마킹된 엔트리들은 바운딩 박스의 영역들에 또한 대응한다. 1차 프레임버퍼의 영역들은 2차 프레임버퍼의 대응 영역들과 비교되고, 차이점을 가진 비교 영역들에 대해서만 마킹된 엔트리들을 포함하는 트리밍된 데이터 구조가 디스플레이 인코더에 발행(publishing)된다. 이러한 방식으로, 디스플레이 인코더는, 트리밍된 데이터 구조의 마킹된 엔트리들에 대응하는 2차 프레임버퍼의 영역의 업데이트된 디스플레이 데이터를 송신할 수 있다.
일실시예에서, 원격 단말기로의 디스플레이 데이터의 차후 전송을 준비하기 위해 발행 단계 이후에 데이터 구조의 엔트리들이 클리어된다. 일실시예에서, 비교 단계가 차이점을 나타내는 영역들은, 1차 프레임버퍼로부터 2차 프레임버퍼의 대응 영역으로 복제되어, 업데이트된 디스플레이 데이터를 2차 프레임버퍼에 제공한다.
본 발명에 따르면, 2차 프레임버퍼에게로 프레임버퍼를 복제하는 연산 오버헤드를 감소시킬 수 있다.
도 1은 본 발명의 일실시예에 따른 원격 데스크탑 서버의 블록도.
도 2는 본 발명의 일실시예에 따른 "블리트맵(blitmap)" 데이터 구조의 도면.
도 3은 본 발명의 일실시예에 따른 제 2 블리트맵 데이터 구조의 도면.
도 4는 본 발명의 일실시예에 따라, 애플리케이션으로부터 비디오 어댑터로 드로잉 요청을 송신하기 위한 단계들을 도시한 흐름도.
도 5는 본 발명의 일실시예에 따라, 비디오 어댑터로부터 디스플레이 인코더로 프레임버퍼 데이터를 송신하기 위한 단계들을 도시한 흐름도.
도 6은 본 발명의 일실시예에 따라 블리트맵 데이터 구조를 트리밍하기 위한 단계들을 도시한 흐름도.
도 7은 본 발명의 일실시예에 따라 블리트맵 데이터 구조를 트리밍하기 위한 시각적 예의 도면.
도 2는 본 발명의 일실시예에 따른 "블리트맵(blitmap)" 데이터 구조의 도면.
도 3은 본 발명의 일실시예에 따른 제 2 블리트맵 데이터 구조의 도면.
도 4는 본 발명의 일실시예에 따라, 애플리케이션으로부터 비디오 어댑터로 드로잉 요청을 송신하기 위한 단계들을 도시한 흐름도.
도 5는 본 발명의 일실시예에 따라, 비디오 어댑터로부터 디스플레이 인코더로 프레임버퍼 데이터를 송신하기 위한 단계들을 도시한 흐름도.
도 6은 본 발명의 일실시예에 따라 블리트맵 데이터 구조를 트리밍하기 위한 단계들을 도시한 흐름도.
도 7은 본 발명의 일실시예에 따라 블리트맵 데이터 구조를 트리밍하기 위한 시각적 예의 도면.
도 1은 본 발명의 하나 이상의 실시예에 따른 원격 데스크탑 서버의 블록도를 도시한다. 원격 데스크탑 서버(100)는, 데스크탑, 랩탑, 또는 x86 아키텍처 플랫폼같은 서버 그레이드 하드웨어 플랫폼(102) 상에 구성될 수도 있다. 이러한 하드웨어 플랫폼은 CPU(104), RAM(106), 네트워크 어댑터(108)(NIC)(108), 하드 드라이브(110), 그리고 제한이 아닌 예로서 마우스 및 키보드와 같은 다른 I/O장치(미도시)를 포함할 수도 있다.
이하, 하이퍼바이저(hypervisor)(124)라고도 불리는 가상화 소프트웨어 레이어가 하드웨어 플랫폼(102) 상에 인스톨된다. 하이퍼바이저(124)는, 다수의 가상 머신들(VM: 1281-128N)이 동시에 인스턴스화 및 실행될 수도 있는 가상 머신 실행 공간(126)을 지원한다. 일실시예에서, 각각의 VM(1281-128N)은, 서로 다른 클라이언트 단말기로부터 원격으로 연결된 서로 다른 사용자를 지원한다. 각각의 VM(1281-128N)에 대하여, CPU(132), RAM(134), 하드 드라이브(136), NIC(138), 그리고 비디오 어댑터(140)와 같은, 소프트웨어로 구현되는 에뮬레이션된 하드웨어를 포함하는 대응 가상 하드웨어 플랫폼(즉, 가상 하드웨어 플랫폼(1301-130N))을 하이퍼바이저(124)가 관리한다. 에뮬레이션된 비디오 어댑터(140)는 프레임버퍼(142)와 선입선출(FIFO) 버퍼(144)를 할당하고 유지하며, 그 프레임버퍼(142)는 비디오 디스플레이(즉, 프레임)가 리프레시되는 화소 값들의 버퍼를 보유하는 비디오 어댑터(140)에 의해 사용되는 메모리의 일부이고, 그 FIFO 버퍼(144)는 프레임버퍼를 업데이트하기 위해 사용되는 드로잉 프리미티브들의 리스트를 보유하는 비디오 어댑터(140)에 의해 사용되는 메모리의 일부이다. 일실시예에서, FIFO 버퍼(144)는, 비디오 어댑터(140)와 비디오 어댑터 드라이버(154) 사이에서 액세스되고 공유되는 공유 메모리 버퍼이다.
가상 하드웨어 플랫폼(1301)은, 인스턴스화된 가상 머신(가령, 가상 머신(1281))에 대한 애플리케이션들(148)을 실행시키기 위한 게스트 운영 시스템(OS)(146)으로서 임의의 x86 지원 운영 시스템, 가령, Microsoft Windows, 리눅스, 솔라리스 x86, 넷웨어, FreeBSD, 등이 인스톨될 수도 있도록 표준 x86 하드웨어 아키텍처의 등가물로 기능할 수도 있다. 디스플레이 상에 드로잉을 요구하는 애플리케이션들(148)은, 그래픽 드로잉 인터페이스 레이어(150)에 의해 제공되는 API(가령, 일실시예에서는 마이크로소프트 윈도우즈 GDI)를 통해 드로잉 요청을 제출하며, 차례로, 이러한 API는 드로잉 요청을 드로잉 명령으로 변환하고 드로잉 명령을 디바이스 드라이버 레이어(152)의 비디오 어댑터 드라이버(154)로 전송한다. 도 1의 실시예에 도시된 바와 같이, 비디오 어댑터 드라이버(154)는 "블리트맵(blitmap)" 데이터 구조로 이하 불리는 공간 데이터 구조(156)를 할당하고 유지하며, 이 구조는 비디오 어댑터(140)의 프레임버퍼(142)의 잠재적으로 변하는 영역들을 추적한다. 블리트맵 데이터 구조의 이용 및 구현에 관한 추가적인 세부사항은 아래에서 상세히 설명된다. 디바이스 드라이버 레이어(152)는, 에뮬레이션된 디바이스들이 하드웨어 플랫폼(102)의 실제 물리적 디바이스인 것처럼, 가상 하드웨어 플랫폼(1301)내의 에뮬레이션된 디바이스(가령, 가상 NIC(138) 등)와 상호작용하는 NIC 드라이버(158)와 같은 추가적인 디바이스 드라이버들을 포함한다. 일반적으로, 하이퍼바이저(124)는 가상 플랫폼(1301)내의 에뮬레이션된 디바이스들에 의해 수신되는 디바이스 드라이버 레이어(152)의 디바이스 드라이버들로부터 요청을 받아들일 책임이 있고, 이 요청을, 하드웨어 플랫폼(102)의 실제 디바이스들과 통신하는 하이퍼바이저(124)의 물리적 디바이스 드라이버 레이어의 실제 디바이스 드라이버들에 대한 대응하는 요청으로 변역할 책임이 있다.
그래픽 사용자 인터페이스를 원격 클라이언트 단말기의 디스플레이로 송신하기 위해, VM(1281)은 디스플레이 인코더(160)를 더 포함하며, 그 디스플레이 인코더(160)는 (가령, API를 통해) 비디오 어댑터 드라이버(154)와 상호작용하여, 가령, (네트워크 전송 대역폭을 감소시키기 위한) 인코딩 및 NIC 드라이버(158)를 통한(가령, 가상 NIC(138)를 통한, 그리고 최종적으로는 물리적 NIC(108)를 통한) 네트워크상으로의 후속 전송을 위해 프레임버퍼(142)로부터 데이터를 획득한다. 디스플레이 인코더(160)는 프레임버퍼(142)로부터 수신된 데이터를 저장하기 위한 2차 프레임버퍼(162) 뿐만 아니라, 2차 프레임버퍼(162)의 변경된 영역들을 식별하기 위한 자체 블리트맵 데이터 구조(164)(이하, 인코더 블리트맵 데이터 구조(164)라고도 함) 를 할당 및 유지한다. 일실시예에서, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)를 연속적으로 폴링하여(가령, 초당 30회 또는 60회), 프레임버퍼(142)에서 이루어진 변경을 2차 프레임버퍼(162)에 복제하여 원격 클라이언트 단말기에 전송한다.
당업자는, 도 1의 가상화 컴포넌트들을 설명하는데 사용되는 다양한 용어, 레이어, 분류들이 본 발명의 기능이나 사상으로부터 벗어남이 없이 이와는 다르게 일컬어질 수 있다는 것을 인식할 것이다. 가령, 가상 하드웨어 플랫폼(1301-130N)은 하이퍼바이저(124)와 대응하는 VM(1281-128N) 간의 동작을 조정하는데 필요한 가상 시스템 지원을 구현하는 가상 머신 모니터(VMM; 1661-166N)의 일부라고 간주될 수도 있다. 대안적으로, 가상 하드웨어 플랫폼(1301-130N)은 VMM(1661-166N)과는 별개의 것으로 간주될 수도 있으며, VMM(1661-166N)은 하이퍼바이저(124)와는 별개의 것으로 간주될 수도 있다. 본 발명의 일실시예에 사용될 수도 있는 하이퍼바이저(124)의 한가지 예는, 캘리포니아주, Palo Alto 에 소재한 VMware, Inc. 로부터 상업적으로 입수가능한 VMware's ESXTM 제품의 컴포넌트로서 포함된다. 본 발명의 실시예들이 호스팅된 가상 머신 시스템같은 다른 가상화 컴퓨터 시스템에도 실현될 수도 있음을 인식하여야 하며, 여기서 하이퍼바이저는 운영 시스템의 상부에서 구현된다.
도 2는 본 발명의 일실시예에 따른 블리트맵 데이터 구조를 도시한다. 비디오 어댑터 드라이버(154)와 디스플레이 인코더(160) 양자는, 각각, 블리트맵 데이터 구조를 이용하여, 프레임버퍼(142)와 2차 프레임버퍼(162)의 변경된 영역을 추적한다. 도 2의 실시예에서, 블리트맵 데이터 구조는 2차원 비트 벡터이며, 여기서, 비트 벡터의 각각의 비트("블리트맵 엔트리"라고도 함)는 대응 프레임버퍼의 NxN 영역을 나타낸다. 비트 벡터에서 세팅된 비트("마킹된" 블리트맵 엔트리라고도 함)는 (가령, 디스플레이 인코더(160)에 의한 폴링 요청 사이에서) 특정 시간 간격동안 프레임 버퍼의 대응 NxN 영역에서 적어도 하나의 화소 값이 변화되었음을 표시한다. 예를 들어, 도 2는 64x64 화소 블록(200)의 프레임버퍼를 도시하며, 여기서, 검은 도트는 특정 시간 간격동안 변화된 화소 값들을 나타낸다. 8x8 비트 벡터(205)는 블리트맵 데이터 구조의 대응 블리트맵 엔트리 블록을 나타내며, 여기서 각각의 비트(또는 블리트맵 엔트리)는 화소 블록(200)의 8x8 영역에 대응한다. 비트 벡터(205)의 세팅된 비트(또는 마킹된 블리트맵 엔트리)는 X로 표현된다. 예를 들어, 마킹된 블리트맵 엔트리(210)는 프레임버퍼 영역(215)에 대응한다(그 영역의 픽셀 값들 모두는, 검은색 도트들에 의해 표시되는 바와 같이 특정된 시간 간격동안 변경된다). 도 2는 검은색 도트로 표시되는 바와 같이, 변경된 화소 값들을 가진 프레임버퍼 화소 블록(200)의 영역들에 대응하는 비트 벡터(205)의 다른 마킹된 블리트맵 엔트리들을 도시한다. 도 2의 (205)와 유사한 블리트맵 데이터 구조의 2차원 비트 벡터 실시예를 트래버싱(traversing)함으로써, 일 시간 간격동안 프레임버퍼의 NxN 영역 중 어느 영역이 변경되었는지를 용이하게 식별할 수 있다 (그리고, 그 시간 간격 동안 변경되지 않은 영역들을 용이하게 스킵할 수 있다).
도 3은 본 발명의 일실시예에 따른 제 2 블리트맵 데이터 구조를 도시한다. 도 3의 실시예에서, 블리트맵 데이터 구조는 영역 쿼드트리(quadtree) 이며, 여기서, 그 쿼드트리의 각 레벨은 2N x 2N 화소 블록들의 고해상도 비트 벡터를 나타낸다. 도 3은 프레임버퍼의 64x64 화소 블록(300)을 도시하며, 여기서, 검은색 도트는 특정 시간 간격동안 변경된 화소 값들을 나타낸다. 화소 블록은, 각각의 변경된 화소(가령, 검은색 도트)가 가장 작은 서브-쿼드런트 내에 포함될 때까지 더 작은 서브-쿼드런트로 계속해서 세분된다. 예를 들어, 화소 블록(300)에서, 가장 작은 서브-쿼드런트는 영역들(305, 310 및 315)과 같은 8x8 화소 영역이다. 더 큰 서브-쿼드런트는 영역들(320 및 325)과 같은 16x16 서브-쿼드런트 뿐만 아니라, 영역(330)과 같은 32x32 서브-쿼드런트를 포함한다. 4-레벨 영역 쿼드트리(335)는 프레임버퍼의 64x64 화소 블록(300)에 대응하는 블리트맵 데이터 구조를 나타낸다. 도 3에 도시되는 바와 같이, 각 레벨의 영역 쿼드트리(335)는 비트 벡터로서 구현될 수 있으며, 이 비트 벡터의 비트들은, 비트 벡터의 레벨에 따라, 64x64 내지 8x8 범위에 있는 화소 블록(300)의 특정 크기의 서브-쿼드런트에 대응한다. "X"로 마킹된 영역 쿼드트리(335)내의 노드는 화소 블록(300) 내의 노드의 대응 서브-쿼드런트의 적어도 하나의 화소 값이 특정 시간 간격동안 변경되었음을 표시한다. 예를 들어, 영역 쿼드트리(335)의 레벨 0(64x64 레벨)의 노드(300Q)는 64x64 화소 블록을 나타내며, 화소 블록(300)내의 적어도 하나의 화소 값이 변경되므로, "X"로 마킹된다. 이와 달리, 영역 쿼드트리(335)의 레벨 1(32x32 레벨)의 노드(330Q)는 32x32 서브-쿼드런트(330)를 나타내며, 서브-쿼드런트(330) 내의 어떤 화소 값들도 변경되지 않으므로 마킹되지 않는다. 마찬가지로, 레벨 2(16x16 레벨)의 노드들 (320Q 및 325Q)은, 각각, 16x16 서브-쿼드런트들(320 및 325)을 나타내며, 서브-쿼드런트들(320 및 325) 내의 어떤 화소 값들도 변경되지 않으므로 마킹되지 않는다. 레벨 3(8x8 레벨)의 노드들(305Q, 310Q 및 315Q)은 화소 블록(300)의 8x8 영역들(305, 310 및 315)에 각각 대응하며, 이에 따라 마킹된다. 도 3의 실시예와 같은 블리트맵 데이터 구조의 영역 쿼드트리 실시예에서, (8x8 화소 영역과 같은 가장 작은 서브-쿼드런트에 대응하는) 영역 쿼드트리의 가장 깊은 레벨의 각 노드는 블리트맵 엔트리이다. 블리트맵 데이터 구조의 영역 쿼드트리 실시예를 트래버싱함으로써, 일 시간 간격동안 프레임버퍼의 8x8 영역들(또는 그외 다른 최소 크기의 서브-쿼드런트들) 중 어느 것이 변경되었는지를 손쉽게 식별할 수 있다. 더욱이, 이러한 트리 구조로 인해, 그 시간 간격 동안 변경되지 않은 프레임버퍼 내의 큰 사이즈의 서브-쿼드런트들을 빠르게 스킵할 수 있다. 블리트맵 데이터 구조의 영역 쿼드트리 실시예가, 영역 쿼드트리의 특정 구현 방식에 따라 블리트맵 데이터 구조에 의해 사용되는 메모리를 추가적으로 보존할 수도 있다는 점도 인식하여야 할 것이다. 예를 들어, 도 2의 블리트맵 데이터 구조(205)의 2차원 비트 벡터 실시예가 얼마나 많은 8x8 영역들이 마킹되지 않을 수도 있는지에 관계없이 64비트를 소모하지만, 도 3의 영역 쿼드트리(335)는 더 적은 8x8 영역들이 마킹될 경우 더 적은 비트를 소모한다. 도시된 바와 같이, 블리트맵 데이터 구조(205)의 구현은 64비트를 이용하지만, 블리트맵 데이터 구조(335)는 33 비트를 이용한다. 인코더 블리트맵 데이터 구조(164)와 드라이버 블리트맵 데이터 구조(156) 각각이 도 2 및 도 3의 데이터 구조를 포함한 다양한 서로 다른 데이터 구조들을 이용하여 구현될 수도 있으며, 임의의 실시예에서, 인코더 블리트맵 데이터 구조(164)가 드라이버 블리트맵 데이터 구조(156)와는 다른 데이터 구조를 이용할 수도 있다는 점을 추가적으로 인식하여야 할 것이다.
도 4는 발명의 일실시예에 따르면, 애플리케이션으로부터 비디오 어댑터로 드로잉 요청을 전송하기 위한 단계들을 도시한 흐름도이다. 이 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트들을 참고하여 설명되지만, 이러한 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명에 부합한다는 것을 인식하여야 할 것이다.
도 4의 실시예에 따르면, 단계 405에서, 실행 중에, 애플리케이션(400)(즉, 게스트 OS(146) 상에서 실행되고 있는 애플리케이션(148)들 중 하나)은, 가령, 사용자 액션에 응답하여 그래픽 사용자 인터페이스를 업데이트하기 위해, 그래픽 드로잉 인터페이스 레이어(150)(가령, 마이크로소프트 윈도우즈의 GDI)의 API에 액세스하여 드로잉 요청을 스크린에 전달한다. 단계 410에서, 게스트 OS(146)를 통해, 그래픽 드로잉 인터페이스 레이어(150)는 드로잉 요청을 수신하고, 이를 비디오 어댑터 드라이버(154)에 의해 이해되는 드로잉 명령으로 변환한다. 단계 415에서, 그래픽 드로잉 인터페이스 레이어(150)는 드로잉 명령을 비디오 어댑터 드라이버(154)에 송신한다. 단계 420에서, 비디오 어댑터 드라이버(154)는 드로잉 명령을 수신하고, 드라이버 블리트맵 데이터 구조(156)의 엔트리들을 마킹하여, 드라이버 블리트맵 데이터 구조(156)의 마킹된 엔트리들에 대응하는 프레임버퍼(142)의 영역들 내의 화소 값들 중 적어도 일부가 드로잉 명령 실행 결과로서 업데이트될 것임을 표시한다. 일실시예에서, 비디오 어댑터 드라이버(154)는, 드로잉 명령의 실행 결과로서 업데이트될 화소들을 포함하는 최소 크기의 직사각형과 같은, 프레임버퍼(142) 내의 구역을 계산하거나 결정하며, 그 영역은 "바운딩 박스(bounding box)"라고 불리기도 한다. 그 후, 비디오 어댑터 드라이버(154)는 결정된 영역 내의 화소 값들을 포함하는 프레임버퍼(154)의 영역들에 대응하는 드라이버 블리트맵 데이터 구조(156) 내의 모든 블리트맵 엔트리들을 식별 및 마킹할 수 있다. 단계 425에서, 비디오 어댑터 드라이버(154)는 드로잉 명령을 디바이스 특정 드로잉 프리미티브로 변환하고, 단계 430에서, 가령, FIFO 버퍼(144)가 비디오 어댑터 드라이버(154)와 비디오 어댑터(140) 사이에서 공유되는 실시예에서, 드로잉 프리미티브를 FIFO 버퍼(144)에 삽입한다. 그 후, 단계 435에서, 드로잉 프리미티브의 동작 준비가 되었을 때 (즉, FIFO 버퍼(144)의 종료점에 그러한 드로잉 프리미티브들이 도달할 때), 비디오 어댑터(140)는 그 드로잉 프리미티브에 따라 프레임버퍼(142)를 최종적으로 업데이트할 수 있다.
도 5는 본 발명의 일실시예에 따라 비디오 어댑터로부터 디스플레이 인코더로 프레임버퍼 데이터를 전송하기 위한 단계들을 도시한 흐름도이다. 이 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트들을 참고하여 설명되지만, 그 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명에 부합한다는 것을 인식하여야 할 것이다.
도 5의 실시예에 따르면, 디스플레이 인코더(160)는, 비디오 어댑터(140)의 프레임버퍼(154)에서 데이터를 획득하여 인코딩하고, 원격 클라이언트 단말기에 의한 수신을 위해 (가령, NIC 드라이버(158)를 통해) 네트워크로 송신하도록, 비디오 어댑터 드라이버(154)를 계속적으로 (가령, 초당 30회 또는 60회) 폴링하는 게스트 OS(146) 상에서 구동하는 프로세스이다. 단계 500에서, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)에 의해 디스플레이 인코더에 노출된 API 루틴을 통해, 비디오 어댑터 드라이버(154)에 프레임버퍼 업데이트 요청을 이슈하고, 2차 프레임버퍼(162)에 대한 메모리 레퍼런스(가령, 포인터)를 비디오 어댑터 드라이버(154)에 전달하여, 비디오 어댑터 드라이버(154)로 하여금 2차 프레임버퍼(162)를 직접 수정할 수 있게 한다. 단계 505에서, 비디오 어댑터 드라이버(154)는 프레임버퍼 업데이트 요청을 수신하고, 단계 510에서, 블리트맵 데이터 구조(156)를 가로질러서, (도 4에 설명된 바와 같은 애플리케이션들로부터의 드로잉 요청으로 인한) 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청 이후로 변경된 프레임버퍼(142)의 영역들에 대응하는 마킹된 블리트맵 엔트리들을 식별한다. 단계 515에서, 현재의 블리트맵 엔트리가 마킹될 경우, 단계 520에서, 비디오 어댑터 드라이버(154)는 비디오 어댑터(140)로부터 프레임버퍼(142)의 대응 영역(즉, 이 영역의 화소 값들)을 요청한다. 단계 525에서, 비디오 어댑터(140)는 이 요청을 수신하여 프레임버퍼(142)의 요청 영역을 비디오 어댑터 드라이버(154)에 전송한다.
단계 530에서, 비디오 어댑터 드라이버(154)는 프레임버퍼(142)의 요청 영역을 수신하고, 단계 535에서, 프레임버퍼(142)의 수신된 요청 영역의 화소 값들을 2차 프레임버퍼(162)의 대응하는 영역의 화소 값들과 비교하며, 이는 디스플레이 인코더(160)로부터의 이전 프레임버퍼의 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료시에 프레임버퍼(142)의 이전 상태를 반영한다. 이러한 비교 단계 535는 도 4에 설명된 바와 같이 애플리케이션들에 의한 드로잉 요청의 시각적으로 리던던트한 전송으로부터 발생하는 가능한 비효율성을 어댑터 드라이버(154)로 하여금 식별할 수 있게 한다. 예를 들어, 그 기능의 드로잉 관련 양태들을 최적화시키는 것에 대한 포커싱의 부족 때문에, 그래픽 사용자 인터페이스의 매우 작은 영역만이 애플리케이션에 의해 실제로 수정되었다하더라도 전체 그래픽 사용자 인터페이스를 리던던트하게 리드로잉하는 도 4의 단계 405의 드로잉 요청을 일부 애플리케이션들이 이슈할 수도 있다. 이러한 드로잉 요청에 의해, (비록 마킹된 블리트맵 엔트리들의 대응 프레임버퍼(142) 영역들(즉, 실제로는 수정되지 않는 그래픽 사용자 인터페이스의 일부에 대응하는 영역들)이 새로운 화소 값들로 업데이트될 필요가 없더라도) 도 4의 단계 420에서 드라이버 블리트맵 데이터 구조(156)의 엔트리들이 마킹되게 된다. 그러한 마킹된 블리트맵 엔트리들을 이용하여, 비교 단계 535는, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료 이후 (단계 405에서) 애플리케이션들에 의해 제출되는 최적화되지 않은 드로잉 요청으로 인해 이러한 영역들의 화소 값이 변하지 않으므로, 마킹된 블리트맵 엔트리에 대응하는 2차 프레임버퍼(162)와 프레임버퍼(142)의 영역들이 동일하다는 것을 알 수 있다.
이와 같이, 단계 540에서, 비교 단계 535가 프레임버퍼(142)와 2차 프레임버퍼(162)의 영역들이 동일하다고 나타내는 경우, 단계 545에서, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료 이후에, 비디오 어댑터 드라이버(154)는 어떤 실제 화소 값들도 프레임버퍼(142)의 대응 영역에서 변하지 않았음을 표시하도록 마킹된 블리트맵 엔트리들을 클리어함으로써 드라이버 블리트맵 데이터 구조(156)를 트리밍한다.
도 6은 본 발명의 일실시예에 따른 블리트맵 데이터 구조를 트리밍하기 위한 단계들을 도시한 흐름도이다. 이 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트들을 참고하여 설명되지만, 이와 유사한 단계들을 다른 순서로 수행되도록 시스템이 구성될 수도 있다는 것을 인식하여야 할 것이다.
단계 600에서, 비디오 어댑터 드라이버(154)는 그래픽 드로잉 인터페이스 레이어(150)로부터 드로잉 명령을 수신하여, 단계 605에서, 드로잉 명령 실행으로부터 나타나는 모든 화소 값 업데이트들을 포함하는 프레임버퍼(142) 내의 바운딩 박스를 식별한다. 단계 610에서, 비디오 어댑터 드라이버(154)는 바운딩 박스 내에 있는 프레임버퍼(142)의 영역들(또는 그 바운딩 박스내에 있는 영역들의 일부)에 대응하는 드라이버 블리트맵 데이터 구조(156)의 블리트맵 엔트리들을 마킹한다. 단계 605 내지 단계 610이 도 4의 단계 420을 구성하는 서브-단계들에 대응한다는 것을 인식하여야 할 것이다. 단계 615에서 프레임버퍼 업데이트 요청이 디스플레이 인코더로부터 수신될 경우, 단계 620에서, 비디오 어댑터 드라이버(154)는 (드라이버 블리트맵 데이터 구조(156)의 마킹된 블리트맵 엔트리들에 의해 표시되는 바와 같은) 바운딩 박스 내의 프레임버퍼(142)의 영역들을 (바로 이전의 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료시의 프레임버퍼 (142)의 상태를 포함하는) 2차 프레임버퍼(164)의 대응 영역들과 비교한다. 단계 625에서, 비디오 어댑터 드라이버(154)는 디스플레이 인코더(160)에 트리밍된 블리트맵 데이터 구조를 발행하며, 이 구조의 마킹된 엔트리들만이, 실제로 차이점이 존재하는 단계 620의 비교 영역들에 대응한다. 단계 630에서, 비디오 어댑터 드라이버(154)는 모든 마킹된 엔트리들의 드라이버 블리트맵 데이터 구조(154)를 클리어한다. 단계 615 내지 630이 도 5의 단계들 505, 535, 560 및 565에 각각 대응한다는 것을 인식하여야 할 것이다. 단계 635에서, 디스플레이 인코더(160)는 트리밍된 블리트맵 데이터 구조를 수신하고, 단계 640에서, 트리밍된 블리트맵 데이터 구조의 마킹된 엔트리들에 대응하는 영역의 디스플레이 데이터를 송신한다.
도 7은 블리트맵 데이터 구조를 트리밍하기 위한 시각적인 예를 도시한다. 도 7은 프레임버퍼(142)의 88x72 화소 블록(700)을 도시한다. 세분된 각각의 블록(가령, 블록(705))은 드라이버 블리트맵 데이터 구조(156)의 블리트맵 엔트리에 대응하는 8x8 화소 영역을 나타낸다. 도 7에 도시된 바와 같이, 도 6의 단계 600에 따르면, 비디오 어댑터 드라이버(154)는 화소 블록(700)에 표시된 바와 같이 웃는 얼굴을 드로잉하기 위해 애플리케이션의 드로잉 요청에 관한 드로잉 명령을 수신한다. 그러나, 드로잉 명령은, 단지 웃는 얼굴 그 자체의 특정 화소들의 드로잉을 요청하는 것이 아니라, 전체 화소 블록(700)을 리드로잉하는 것을 비효율적으로 요청한다. 이와 같이, 드라이버 블리트맵 데이터 구조(156)의 대응하는 11x9 블리트맵 블록(710) 내의 각각의 블리트맵 엔트리들은 (마킹된 블리트맵 엔트리(715)와 같이) 도 6의 단계 610에 따라 비디오 어댑터 드라이버(154)에 의해 마킹된다. 그러나, 단계 615에서처럼 비디오 어댑터 드라이버(154)가 디스플레이 인코더(160)로부터 프레임버퍼 업데이트 요청을 수신할 경우, 비디오 어댑터 드라이버(154)는, 예를 들어, 도 5의 단계 545에서와 같이 프레임버퍼(142)내의 그 대응 영역들이 실제로 변경되지 않았던 (즉, 웃는 얼굴 수정 픽셀을 포함하지 않은) 마킹되지 않은 블리트맵 엔트리(725)와 같은 블리트맵 엔트리들을 클리어함으로써, 블리트맵 블록(710)을 트리밍할 수 있으며, 그에 의해, 블리트맵 블록(720)을 생성할 수 있고, 블리트맵 블록(710)을 디스플레이 인코더(160)에 발행한다(단계 620 및 625).
도 5로 돌아가서, 그러나, 단계 540에서, 프레임버퍼(142)와 2차 프레임버퍼(162)의 영역들이 서로 다르다고 비교 단계(535)가 결정하면(즉, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 응답 완료 이후 단계 405에서 애플리케이션들의 드로잉 요청의 결과로서 프레임버퍼(142)의 영역내의 실제 화소 값들이 변경되면), 단계 550에서, 비디오 어댑터 드라이버(154)는 프레임버퍼(412) 의 영역내의 화소 값들을 2차 프레임버퍼(162)의 대응 영역으로 복제하여, 프레임버퍼(142) 의 영역내의 변경된 화소 값들을 2차 프레임버퍼(162)에 적절히 반영한다. 단계 555에서, 비디오 어댑터 드라이버(154)가 드라이버 블리트맵 데이터 구조(156)를 트래버싱하는 것을 완료하지 못하였을 경우, 단계 510으로 흐름이 진행한다. 단계 555에서, 비디오 어댑터 드라이버(154)가 드라이버 블리트맵 데이터 구조(156)를 트래버싱하는 것을 완료하였을 경우, 단계 560에서 비디오 어댑터 드라이버(154)는 디스플레이 인코더(160)에 드라이버 블리트맵 데이터 구조(156)의 사본을 제공하며, 이 사본은 인코더 블리트맵 데이터 구조(164)가 되고, 그로서 불린다. 마킹된 블리트맵 엔트리들이 단계 545에서 드라이버 블리트맵 데이터 구조(156)에서 클리어되는 정도에 따라, 인코더 블리트맵 데이터 구조(164)는 실제 변경된 화소 값들을 가진 2차 프레임버퍼(162)의 영역들의 더 최적화된 뷰를 반영한다. 단계 565에서, 비디오 어댑터 드라이버(154)는 디스플레이 인코더(160)로부터 차후 프레임버퍼 업데이트 요청을 수신할 것을 대비하고자 드라이버 블리트맵 데이터 구조(156)의 모든 마킹된 프레임버퍼 엔트리들을 클리어하며, 단계 500에서 이슈된 프레임버퍼 업데이트 요청에 대한 응답을 완료하였음을 디스플레이 인코더(160)에 표시한다.
단계 500에서 디스플레이 인코더(160)에 의해 이슈된 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답의 완료시에, 2차 프레임버퍼(162)는, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 응답 완료 이후 (도 4의 단계 405로부터) 애플리케이션들로부터의 드로잉 요청에서 생기는 모든 변경 화소 값들을 포함하며, 인코더 블리트맵 데이터 구조(164)는 2차 프레임버퍼(162) 내의 어느 영역이 이러한 변경 화소 값들을 가지는 지를 표시하는 마킹된 블리트맵 엔트리들을 포함한다. 이러한 정보를 이용하여, 단계 570에서, 디스플레이 인코더(160)는 마킹된 블리트맵 엔트리들에 대해 인코더 블리트맵 데이터 구조(164)를 트래버싱할 수 있고, 인코딩 및 원격 클라이언트 디스플레이로의 전송을 위해 그러한 마킹된 블리트맵 엔트리들에 대응하는 2차 프레임버퍼(162) 내의 영역들만을 추출할 수 있다.
도 1이 가상 머신(1281) 내에서 디스플레이 인코더(160)가 실행하는 실시예를 도시하고 있으나, 원격 데스크탑 서버(100)의 다른 컴포넌트들에서 (가령, 가상 머신 모니터(1661)이나 하이퍼바이저(124)에서) 디스플레이 인코더(160)를 구현할 수도 있다는 것을 인식하여야 할 것이다. 마찬가지로, 하이퍼바이저(124)의 가상 비디오 어댑터(140)와 통신하는 가상 머신(1281)에서 디스플레이 인코더(160)와 비디오 어댑터 드라이버(154)가 구동하는 실시예가 도 1에 도시되고 있으나, 비-가상 머신 기반의 연산 아키텍처를 포함한 임의의 원격 데스크탑 서버 구조에서 이들 컴포넌트들이 배치될 수도 있음을 인식하여야 할 것이다. 더욱이, 디스플레이 인코더(160)와 가상 비디오 어댑터(140)를 서버의 소프트웨어 컴포넌트로서 갖기보다는, 대안적인 실시예는 이들 각각 또는 이들 중 어느 하나에 대해 하드웨어 컴포넌트들을 이용할 수도 있다. 마찬가지로, 대안적인 실시형태가 임의의 가상 비디오 어댑터를 요구하지 않을 수도 있다는 것을 인식하여야 할 것이다. 대신에, 그러한 대안적인 실시예에서, 비디오 어댑터 드라이버(154)가 프레임버퍼(142)와 FIFO 버퍼(144) 자체를 관리할 수도 있다. 마찬가지로, 대안적인 실시예에서, 비디오 어댑터(140)가 FIFO 버퍼(140)같은 FIFO 버퍼를 가지지 않을 수도 있지만, 수신시에 인커밍 드로잉 프리미티브들을 즉시 프로세싱할 수도 있다. 유사하게, 여기에 설명된 다양한 데이터 구조 및 버퍼들이 대안적인 시스템 컴포넌트들에 의해 할당 및 유지될 수 있다는 것을 인식하여야 할 것이다. 예를 들어, 디스플레이 인코더(160)가 2차 프레임버퍼(162)를 할당하고 유지하며 도 5의 단계 500에서 상세히 설명된 바와 같이 비디오 어댑터 드라이버(154)에 메모리 레퍼런스를 전달하는 대신에, 일 대안적인 실시예에서, 비디오 어댑터 드라이버(154)는 2차 프레임버퍼(162) 뿐만 아니라 인코더 블리트맵 데이터 구조(164)를 할당 및 유지하고 디스플레이 인코더(160)에 메모리 레퍼런스 액세스를 제공할 수도 있다. 추가적으로, 여기에 설명된 바와 같은 비디오 어댑터 드라이버(154)에 의해 수행되는 기능 및 단계들 중 일부가 기존의 또는 표준형의 비디오 어댑터 드라이버에 대한 별도의 확장부나 별도의 컴포넌트로 구현될 수 있다는 것을 인식하여야 할 것이다 (즉, 디스플레이 인코더(160)는 기존의 비디오 어댑터 드라이버 그 자체보다는 비디오 어댑터 드라이버에 대한 그러한 별도의 확장부와 통신할 수도 있다). 마찬가지로, 여기에 설명된 바와 같은 시스템 컴포넌트들 사이에서 교환되는 데이터의 양과 타입이 변할 수도 있거나, 다양한 최적화 기술이 사용될 수 있다는 것을 인식하여야 할 것이다. 예를 들어, 도 5의 단계 560에서 인코더 블리트맵 데이터 구조(146)로서 모든 드라이버 블리트맵 데이터 구조(156)를 복제 및 제공하는 대신에, 대안적인 실시형태는 디스플레이 인코더(160)에 드라이버 블리트맵 데이터 구조(156)의 관련 부분만을 제공할 수도 있거나, 디스플레이 인코더(160)에 드라이버 블리트맵 데이터 구조(156)의 그러한 관련 부분을 제공하도록 대안적인 데이터 구조를 이용할 수도 있다. 마찬가지로, 본 발명의 교시 부분들을 최적화시키기 위해 캐싱 기술이 이용될 수 있다는 것을 인식하여야 할 것이다. 예를 들어, 도 4의 단계 420 동안 연산 오버헤드를 감소시키기 위해 FIFO 버퍼(144)의 중간 캐시를 비디오 어댑터 드라이버(154)가 보유할 수 있다. 마찬가지로, 비디오 어댑터 드라이버(154)를 연속적으로 폴링하는 것 대신에 (또는 그에 부가하여), 일 대안적인 실시형태에서, 프레임버퍼(142)가 그 콘텐트를 업데이트하고/하거나 원격 클라이언트로부터 프레임버퍼 업데이트 요청을 부가적으로 수신할 경우, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)에 의해 개시되는 인터럽트나 콜백을 수신할 수도 있다.
여기에 설명된 다양한 실시예들은 컴퓨터 시스템에 저장된 데이터와 관련된 다양한 컴퓨터-구현 동작들을 이용할 수도 있다. 가령, 이 동작들은 일반적으로 물리양의 물리적 조작을 요구할 수도 있지만, 이 양들 또는 그들의 표현이 저장될 수 있는, 전달될 수 있는, 결합될 수 있는, 비교될 수 있는, 또는 조작될 수 있는 전기 신호 또는 자기 신호의 형태를 취할 수도 있다. 더욱이, 이러한 조작들은 종종 생성, 식별, 결정, 또는 비교와 같은 용어로 불리기도 한다. 본 발명의 하나 이상의 실시예들의 일부를 형성하는 여기에 설명된 임의의 동작들은 유용한 기계 동작일 수도 있다. 추가적으로, 본 발명의 하나 이상의 실시예들은 이 동작들을 수행하기 위한 장치나 디바이스에 관한 것이다. 특히, 이 장치는 특정한 요구된 용도로 전용으로 구성될 수도 있거나, 컴퓨터에 저장된 컴퓨터 프로그램에 의해 구성되거나 선택적으로 작동하는 범용 컴퓨터일 수도 있다. 특히, 다양한 범용 머신들은 본 발명의 교시에 따라 기록된 컴퓨터 프로그램과 함께 사용될 수도 있거나, 요구된 동작을 수행하기 위해 더 특수화된 장치를 구성하는 것이 더 편리할 수도 있다.
여기에 설명된 다양한 실시예들은 핸드-헬드 디바이스, 마이크로프로세서 시스템, 마이크로프로세서-기반 또는 프로그래머블 소비자 전자 장치, 미니컴퓨터, 메인프레임 컴퓨터를 포함하는 다른 컴퓨터 시스템 구성과 함께 실현될 수도 있다.
본 발명의 하나 이상의 실시예들이 하나 이상의 컴퓨터 판독가능 매체에 수록된 하나 이상의 컴퓨터 프로그램 또는 하나 이상의 컴퓨터 프로그램 모듈로서 구현될 수도 있다. 컴퓨터 판독가능 매체는, 데이터를 저장할 수 있는 임의의 데이터 저장부로 불리며, 그 데이터는 차후에 컴퓨터 시스템에 입력될 수 있고, 이러한 컴퓨터 판독가능 매체는 컴퓨터에 의해 판독될 수 있도록 컴퓨터 프로그램을 수록하기 위한 기존의 또는 차후에 개발될 임의의 기술을 기반으로 할 수도 있다. 컴퓨터 판독가능 매체의 예는 하드 드라이브, 네트워크 부착 저장 장치(NAS), ROM, RAM(가령, 플래시 메모리 디바이스), CD(콤팩 디스크), CD-ROM, CD-R, CD-RW, DVD(Digital Versatile Disc), 자기 테이프, 및 다른 광학식 및 비-광학식 데이터 저장 디바이스를 포함한다. 또한, 컴퓨터 판독가능 매체는, 컴퓨터 판독가능 코드가 분배 방식으로 저장되고 실행되도록, 네트워크 연결된 컴퓨터 시스템에 걸쳐 분포될 수 있다.
본 발명의 하나 이상의 실시예들이 이해의 명확화를 위해 몇몇 세부사항들에서 설명되었지만, 특정한 변경 및 수정이 본 발명의 범위내에서 행해질 수도 있음은 명백하다. 따라서, 설명된 실시예들은 제한이 아닌 예로서 고려될 것이며, 청구항은 여기에서 제공된 세부사항들로 제한되지 않지만, 청구항의 범위 및 등가물내에서 수정될 수도 있다. 청구항에서, 엘리먼트들 및/또는 단계들이 청구항에서 명시적으로 언급되지 않으면, 임의의 특정 동작 순서를 암시하지 않는다.
추가적으로, 설명된 가상화 방법은 일반적으로 가상 머신들이 특정 하드웨어 시스템과 부합하는 인터페이스를 제공한다고 가정하였으나, 어떤 특정 하드웨어 시스템에 직접 대응하지 않는 가상화와 연계하여 설명된 방법들이 사용될 수도 있다는 것을 당업자는 인식할 것이다. 호스팅된 실시예, 논-호스팅 실시예, 이 2개 사이의 차별점을 흐리게 하는 실시예로서 구현되는 다양한 실시예들에 따른 가상화 시스템들이 모두 고려된다. 더욱이, 다양한 가상화 동작들은 그 전부 또는 일부가 하드웨어로 구현될 수도 있다. 예를 들어, 하드웨어 구현은, 논-디스크 데이터의 보안을 위해 저장 액세스 요청을 수정하기 위한 룩-업 테이블을 이용할 수도 있다.
가상화의 정도에 관계없이, 다양한 변경, 수정, 추가, 개선이 가능하다. 따라서, 가상화 소프트웨어는, 가상화 기능을 수행하는 호스트, 콘솔, 또는 게스트 운영 시스템의 컴포넌트들을 포함할 수 있다. 단일 인스턴스로서 여기에서 설명되는 컴포넌트, 동작, 또는 구조들에 대해 복수의 인스턴스들이 제공될 수도 있다. 마지막으로, 다양한 컴포넌트들, 동작들, 및 데이터 저장부들 간의 경계는 임의적일 수 있으며, 특정한 예시적인 구성의 콘텍스트 내에서 특정 동작들이 설명된다. 기능의 다른 할당이 고려되며, 이는 본 발명(들)의 범위 내에 있을 수도 있다. 일반적으로, 예시적인 구성들에서의 개별적인 컴포넌트로서 제공된 구조 및 기능이 결합 구조 또는 결합 컴포넌트로서 구현될 수도 있다. 마찬가지로, 단일 컴포넌트로서 제공된 구조 및 기능들이 별도의 컴포넌트로서 구현될 수도 있다. 이들 및 다른 변화들, 수정들, 추가들, 및 개선들은 첨부된 청구항(들)의 범위내에 있을 수도 있다.
100 ... 원격 데스크탑 서버
102 ... 하드웨어 플랫폼
104 ... CPU
106 ... RAM
108 ... 네트워크 어댑터
110 ... 하드 드라이브
124 ... 하이퍼바이저
126 ... 가상 머신 실행 공간
128 ... 가상 머신(VM)
140 ... 비디오 어댑터
142 ... 프레임버퍼
144 ... FIFO 버퍼
154 ... 비디오 어댑터 드라이버
102 ... 하드웨어 플랫폼
104 ... CPU
106 ... RAM
108 ... 네트워크 어댑터
110 ... 하드 드라이브
124 ... 하이퍼바이저
126 ... 가상 머신 실행 공간
128 ... 가상 머신(VM)
140 ... 비디오 어댑터
142 ... 프레임버퍼
144 ... FIFO 버퍼
154 ... 비디오 어댑터 드라이버
Claims (20)
- 디스플레이 데이터 저장을 위한 1차 프레임버퍼와, 원격 클라이언트 단말기에 디스플레이 데이터를 송신하기 위해 2차 프레임버퍼를 이용하는 디스플레이 인코더를 갖는 서버에서, 상기 원격 클라이언트 단말기에 송신될 디스플레이 데이터를 준비하는 방법으로서,
상기 1차 프레임버퍼에서의 디스플레이 데이터에 대한 업데이트들에 관한 바운딩 박스를 식별하는 단계로서, 상기 업데이트들은 상기 1차 프레임버퍼의 일부에 영향을 미치는 드로잉 명령과 연관되고, 상기 바운딩 박스는 상기 드로잉 명령에 의해 영향받는 상기 1차 프레임버퍼의 상기 일부에 대응하는, 상기 바운딩 박스를 식별하는 단계;
데이터 구조의 엔트리들을 마킹하는 단계로서, 상기 데이터 구조의 각각의 엔트리는 상기 1차 프레임버퍼의 서로 다른 영역에 대응하며, 상기 마킹된 엔트리들은 또한 상기 바운딩 박스의 영역들에 대응하는, 상기 데이터 구조의 엔트리들을 마킹하는 단계;
상기 마킹된 엔트리들에 대응하는 상기 1차 프레임버퍼의 영역들을 상기 2차 프레임버퍼의 대응 영역들과 비교하는 단계; 및
트리밍된 데이터 구조의 마킹된 엔트리들에 대응하는 상기 2차 프레임버퍼의 영역들의 업데이트된 디스플레이 데이터를 디스플레이 인코더가 송신할 수 있도록, 차이점들을 가진 비교된 영역들에 대해서만 마킹된 엔트리들을 포함하는 상기 트리밍된 데이터 구조를 상기 디스플레이 인코더에 발행하는 단계를 포함하는, 디스플레이 데이터 준비 방법. - 제 1 항에 있어서,
상기 발행하는 단계 이후 상기 데이터 구조의 엔트리들을 클리어하는 단계를 더 포함하는, 디스플레이 데이터 준비 방법. - 제 1 항에 있어서,
상기 비교하는 단계가 상기 1차 프레임버퍼와의 차이점을 나타내는 영역들을 상기 2차 프레임버퍼의 대응 영역들로 복제하는 단계를 더 포함하는, 디스플레이 데이터 준비 방법. - 제 1 항에 있어서,
상기 1차 프레임버퍼는 가상 비디오 어댑터에 의해 할당되는 메모리 버퍼이고, 상기 데이터 구조는 상기 가상 비디오 어댑터와 통신하는 비디오 어댑터 드라이버에 의해 할당되는, 디스플레이 데이터 준비 방법. - 제 4 항에 있어서,
상기 비디오 어댑터 드라이버는 상기 서버 상에서 인스턴스화되는 가상 머신의 게스트 운영 시스템의 컴포넌트인, 디스플레이 데이터 준비 방법. - 제 1 항에 있어서,
상기 데이터 구조는 2차원 비트 벡터인, 디스플레이 데이터 준비 방법. - 제 1 항에 있어서,
상기 데이터 구조는 영역 쿼드트리인, 디스플레이 데이터 준비 방법. - 디스플레이 데이터 저장을 위한 1차 프레임버퍼와, 원격 클라이언트 단말기에 디스플레이 데이터를 송신하기 위해 2차 프레임버퍼를 이용하는 디스플레이 인코더를 갖는 서버의 프로세싱 유닛에서 실행될 때, 상기 프로세싱 유닛으로 하여금,
상기 1차 프레임버퍼에서의 디스플레이 데이터에 대한 업데이트들에 관한 바운딩 박스를 식별하는 단계로서, 상기 업데이트들은 상기 1차 프레임버퍼의 일부에 영향을 미치는 드로잉 명령과 연관되고, 상기 바운딩 박스는 상기 드로잉 명령에 의해 영향받는 상기 1차 프레임버퍼의 상기 일부에 대응하는, 상기 바운딩 박스를 식별하는 단계;
데이터 구조의 엔트리들을 마킹하는 단계로서, 상기 데이터 구조의 각각의 엔트리는 상기 1차 프레임버퍼의 서로 다른 영역에 대응하며, 상기 마킹된 엔트리들은 또한 상기 바운딩 박스의 영역들에 대응하는, 상기 데이터 구조의 엔트리들을 마킹하는 단계;
상기 마킹된 엔트리들에 대응하는 상기 1차 프레임버퍼의 영역들을 상기 2차 프레임버퍼의 대응 영역들과 비교하는 단계; 및
트리밍된 데이터 구조의 마킹된 엔트리들에 대응하는 상기 2차 프레임버퍼의 영역들의 업데이트된 디스플레이 데이터를 상기 디스플레이 인코더가 송신할 수 있도록, 차이점들을 가진 비교된 영역들에 대해서만 마킹된 엔트리들을 포함하는 상기 트리밍된 데이터 구조를 상기 디스플레이 인코더에 발행하는 단계
를 수행함으로써, 상기 원격 클라이언트 단말기에 송신될 디스플레이 데이터를 준비하게 하는 명령어들을 포함하는, 컴퓨터 판독가능 매체. - 제 8 항에 있어서,
상기 프로세싱 유닛은, 또한, 상기 발행하는 단계 이후 상기 데이터 구조의 엔트리들을 클리어하는 단계를 수행하는, 컴퓨터 판독가능 매체. - 제 8 항에 있어서,
상기 프로세싱 유닛은, 또한, 상기 비교하는 단계가 상기 1차 프레임버퍼와의 차이점을 나타내는 영역들을 상기 2차 프레임버퍼의 대응 영역들로 복제하는 단계를 수행하는, 컴퓨터 판독가능 매체. - 제 8 항에 있어서,
상기 1차 프레임버퍼는 가상 비디오 어댑터에 의해 할당되는 메모리 버퍼이고, 상기 데이터 구조는 상기 가상 비디오 어댑터와 통신하는 비디오 어댑터 드라이버에 의해 할당되는, 컴퓨터 판독가능 매체. - 제 11 항에 있어서,
상기 비디오 어댑터 드라이버는 상기 서버 상에서 인스턴스화되는 가상 머신의 게스트 운영 시스템의 컴포넌트인, 컴퓨터 판독가능 매체. - 제 8 항에 있어서,
상기 데이터 구조는 2차원 비트 벡터인, 컴퓨터 판독가능 매체. - 제 8 항에 있어서,
상기 데이터 구조는 영역 쿼드트리인, 컴퓨터 판독가능 매체. - 디스플레이 데이터 저장을 위한 1차 프레임버퍼와, 원격 클라이언트 단말기에 디스플레이 데이터를 송신하기 위해 2차 프레임버퍼를 이용하는 디스플레이 인코더를 갖는 서버에서, 상기 원격 클라이언트 단말기에 송신될 디스플레이 데이터를 준비하는 방법으로서,
상기 2차 프레임버퍼를 업데이트시키기 위한 요청을 상기 디스플레이 인코더로부터 수신하는 단계;
업데이트된 디스플레이 데이터를 포함하는 상기 1차 프레임버퍼의 영역들을 위치결정시키기 위해 공간 데이터 구조에서 마킹된 엔트리들을 식별하는 단계로서, 상기 공간 데이터 구조의 각각의 엔트리는 상기 1차 프레임버퍼의 서로 다른 영역에 대응하고, 상기 마킹된 엔트리들은 바운딩 박스의 영역들에 대응하고, 상기 바운딩 박스는 디스플레이 데이터에 대한 업데이트들과 연관된 드로잉 명령에 의해 영향을 받은 상기 1차 프레임버퍼의 일부에 대응하는, 상기 공간 데이터 구조에서 마킹된 엔트리들을 식별하는 단계;
상기 마킹된 엔트리들에 대응하는 상기 1차 프레임버퍼의 위치결정된 영역들을 상기 2차 프레임버퍼의 매칭 영역들과 비교하는 단계;
상기 1차 프레임버퍼의 위치결정된 영역에 저장된 디스플레이 데이터를 상기 2차 프레임버퍼의 대응 영역에 복제하는 단계; 및
상기 공간 데이터 구조의 마킹된 엔트리들에 대응하는 상기 2차 프레임버퍼의 영역들의 업데이트된 디스플레이 데이터를 상기 디스플레이 인코더가 송신할 수 있도록, 차이점들을 가진 비교된 영역들에 대해서만 마킹된 엔트리들을 포함하는 상기 공간 데이터 구조를 상기 디스플레이 인코더에 발행하고 상기 공간 데이터 구조의 마킹된 엔트리들을 클리어하는 단계를 포함하는, 디스플레이 데이터 준비 방법. - 제 15 항에 있어서,
상기 복제하는 단계 이전에, 상기 2차 프레임버퍼를 업데이트시키기 위한 상기 디스플레이 인코더로부터의 이전 요청에 대한 응답 완료시에, 상기 2차 프레임버퍼가 상기 1차 프레임버퍼의 이전 상태를 반영하는 디스플레이 데이터를 포함하는, 디스플레이 데이터 준비 방법. - 제 15 항에 있어서,
상기 서버 상에서 구동하는 애플리케이션에 의해 행해진 드로잉 요청에 대응하는 드로잉 명령을 수신하는 단계;
상기 드로잉 명령을 실행한 결과로서 업데이트될 상기 1차 프레임버퍼의 구역을 결정하는 단계; 및
상기 결정된 구역에 디스플레이 데이터를 포함하는 상기 1차 프레임버퍼의 영역들에 대응하는 상기 공간 데이터 구조의 모든 엔트리들을 마킹하는 단계를 더 포함하는, 디스플레이 데이터 준비 방법. - 제 17 항에 있어서,
상기 결정된 구역은, 상기 드로잉 명령을 실행한 결과로서 업데이트될 상기 1차 프레임버퍼의 모든 디스플레이 데이터의 경계를 짓는 직사각형인, 디스플레이 데이터 준비 방법. - 제 15 항에 있어서,
상기 클리어하는 단계 이전에, 상기 디스플레이 인코더에 상기 공간 데이터 구조의 사본을 제공하는 단계를 더 포함하며,
상기 디스플레이 인코더는, 상기 공간 데이터 구조의 사본 내의 마킹된 엔트리들에 대응하는 상기 2차 프레임버퍼의 영역들에 상주하는 디스플레이 데이터를 송신하는, 디스플레이 데이터 준비 방법. - 제 19 항에 있어서,
상기 2차 프레임버퍼의 대응하는 매칭 영역과 동일한 디스플레이 데이터를 포함하는 상기 1차 프레임버퍼의 위치결정된 영역에 대응하는 상기 공간 데이터 구조 내의 마킹된 엔트리들 각각을 클리어하는 단계를 더 포함하는, 디스플레이 데이터 준비 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/428,971 | 2009-04-23 | ||
US12/428,971 US8441494B2 (en) | 2009-04-23 | 2009-04-23 | Method and system for copying a framebuffer for transmission to a remote display |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100117043A KR20100117043A (ko) | 2010-11-02 |
KR101144694B1 true KR101144694B1 (ko) | 2012-05-24 |
Family
ID=42671795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100037633A KR101144694B1 (ko) | 2009-04-23 | 2010-04-22 | 원격 디스플레이로의 전송을 위해 프레임버퍼를 복제하기 위한 방법 및 시스템 |
Country Status (10)
Country | Link |
---|---|
US (1) | US8441494B2 (ko) |
EP (1) | EP2244183B1 (ko) |
JP (1) | JP5027899B2 (ko) |
KR (1) | KR101144694B1 (ko) |
CN (1) | CN101872293B (ko) |
AU (1) | AU2010201050B2 (ko) |
CA (1) | CA2697143C (ko) |
IL (1) | IL204818A (ko) |
MX (1) | MX2010004475A (ko) |
RU (1) | RU2445705C2 (ko) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8392497B2 (en) | 2009-11-25 | 2013-03-05 | Framehawk, LLC | Systems and algorithm for interfacing with a virtualized computing service over a network using a lightweight client |
US9146884B2 (en) * | 2009-12-10 | 2015-09-29 | Microsoft Technology Licensing, Llc | Push pull adaptive capture |
US8754900B2 (en) * | 2010-06-17 | 2014-06-17 | Thinci, Inc. | Processing of graphics data of a server system for transmission |
US9373152B2 (en) * | 2010-06-17 | 2016-06-21 | Thinci, Inc. | Processing of graphics data of a server system for transmission including multiple rendering passes |
US8442224B2 (en) * | 2010-06-28 | 2013-05-14 | Intel Corporation | Protecting video content using virtualization |
CN101977324A (zh) * | 2010-11-09 | 2011-02-16 | 青岛海信宽带多媒体技术有限公司 | 一种实现屏幕共享的方法 |
CA2876380C (en) * | 2011-06-13 | 2021-03-16 | Lynx Software Technologies Inc. | Systems and methods of secure domain isolation |
EP2563038A1 (en) | 2011-08-26 | 2013-02-27 | Streamtainment Systems OÜ | Method for transmitting video signals from an application on a server over an IP network to a client device |
US10031636B2 (en) * | 2011-09-08 | 2018-07-24 | Microsoft Technology Licensing, Llc | Remoting desktop displays using move regions |
US8560719B2 (en) | 2011-09-14 | 2013-10-15 | Mobitv, Inc. | Fragment server directed device fragment caching |
US9348552B2 (en) * | 2011-11-16 | 2016-05-24 | Cisco Technology, Inc. | Network appliance for transcoding or enriching virtual desktop infrastructure desktop images |
KR20130062463A (ko) | 2011-11-25 | 2013-06-13 | 한국전자통신연구원 | 다중 사용자 및 멀티 플랫폼 지원을 위한 게임 스트리밍 시스템 및 방법 |
CN103139634B (zh) * | 2011-11-30 | 2017-03-15 | 国云科技股份有限公司 | 云终端虚拟桌面视频播放方法 |
US10430036B2 (en) * | 2012-03-14 | 2019-10-01 | Tivo Solutions Inc. | Remotely configuring windows displayed on a display device |
CN103455292B (zh) * | 2012-05-28 | 2016-09-21 | 展讯通信(上海)有限公司 | 业务数据显示处理方法与装置、用户设备 |
US9798508B2 (en) * | 2012-07-16 | 2017-10-24 | Microsoft Technology Licensing, Llc | Implementing previously rendered frame buffer information in a customized GUI display |
US9213556B2 (en) | 2012-07-30 | 2015-12-15 | Vmware, Inc. | Application directed user interface remoting using video encoding techniques |
US9277237B2 (en) * | 2012-07-30 | 2016-03-01 | Vmware, Inc. | User interface remoting through video encoding techniques |
US10705631B2 (en) * | 2012-11-06 | 2020-07-07 | Hewlett-Packard Development Company, L.P. | Interactive display |
CN103105131B (zh) * | 2013-01-24 | 2015-08-19 | 东莞市嘉腾仪器仪表有限公司 | 一种影像测量仪显示图像的方法 |
CN103049883A (zh) * | 2013-01-29 | 2013-04-17 | 陕西汽车集团有限责任公司 | 一种快速绘图的方法和装置 |
CN103618911B (zh) * | 2013-10-12 | 2017-02-01 | 北京视博云科技有限公司 | 一种基于视频属性信息的视频流提供方法及装置 |
GB2528870A (en) * | 2014-07-31 | 2016-02-10 | Displaylink Uk Ltd | Managing display data for display |
CN105516229B (zh) * | 2014-10-15 | 2020-02-28 | 中兴通讯股份有限公司 | 一种更新虚拟桌面的方法和装置 |
RU2602970C2 (ru) * | 2014-12-01 | 2016-11-20 | Общество С Ограниченной Ответственностью "Яндекс" | Способ организации множества объектов, содержащихся в дереве квадрантов, в односвязный список и компьютер, используемый в нем |
US10102664B1 (en) * | 2014-12-03 | 2018-10-16 | Charles Schwab & Co., Inc. | System and method for causing graphical information to be rendered |
CN106161368B (zh) | 2015-04-07 | 2020-04-14 | 阿里巴巴集团控股有限公司 | 一种用于对云应用进行远程访问的方法、装置及*** |
US10082941B2 (en) | 2015-05-20 | 2018-09-25 | Vmware, Inc. | Optimizing window move actions for remoted applications |
US10564829B2 (en) | 2016-03-25 | 2020-02-18 | Vmware, Inc. | Optimizing window resize actions for remoted applications |
CN106227491B (zh) * | 2016-08-04 | 2019-05-14 | 浪潮电子信息产业股份有限公司 | 一种远程桌面视频播放方法、服务器、客户端及*** |
CN109271218A (zh) * | 2017-07-17 | 2019-01-25 | 中兴通讯股份有限公司 | 一种虚拟桌面数据显示的方法及*** |
CN107479821B (zh) * | 2017-08-28 | 2021-07-27 | 海信视像科技股份有限公司 | 一种界面绘制方法及装置 |
CN107608588B (zh) * | 2017-10-20 | 2021-11-30 | 京东方科技集团股份有限公司 | 显示层、显示方法、显示***和操作*** |
CN111208966B (zh) * | 2019-12-31 | 2021-07-16 | 华为技术有限公司 | 显示方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080018396A (ko) * | 2006-08-24 | 2008-02-28 | 한국문화콘텐츠진흥원 | 이동통신 단말기의 디스플레이 정보를 외부 디스플레이장치에서 디스플레이하기 위한 모바일 애플리케이션 및pc 애플리케이션을 기록한 컴퓨터 판독 가능 기록매체 |
US7447997B2 (en) * | 2002-05-30 | 2008-11-04 | Microsoft Corporation | Reducing information transfer in screen capture series |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1003121A (en) | 1910-01-31 | 1911-09-12 | John N Oveson | Curtain-stretcher. |
US5600763A (en) * | 1994-07-21 | 1997-02-04 | Apple Computer, Inc. | Error-bounded antialiased rendering of complex scenes |
US6343313B1 (en) * | 1996-03-26 | 2002-01-29 | Pixion, Inc. | Computer conferencing system with real-time multipoint, multi-speed, multi-stream scalability |
DE19912770A1 (de) | 1999-03-22 | 2000-09-28 | Bosch Gmbh Robert | Zündsteuervorrichtung und -verfahren |
JP3466951B2 (ja) | 1999-03-30 | 2003-11-17 | 株式会社東芝 | 液晶表示装置 |
US6331855B1 (en) | 1999-04-28 | 2001-12-18 | Expertcity.Com, Inc. | Method and apparatus for providing remote access, control of remote systems and updating of display information |
US7038696B2 (en) * | 2002-01-04 | 2006-05-02 | Hewlett-Packard Development Company | Method and apparatus for implementing color graphics on a remote computer |
US7386324B2 (en) * | 2002-04-17 | 2008-06-10 | Lenovo (Singapore) Pte. Ltd. | System and method for dual path terminal connection |
JP2004086550A (ja) * | 2002-08-27 | 2004-03-18 | Matsushita Electric Ind Co Ltd | 表示画面更新システム |
US20060282855A1 (en) | 2005-05-05 | 2006-12-14 | Digital Display Innovations, Llc | Multiple remote display system |
JP4878782B2 (ja) | 2005-07-05 | 2012-02-15 | シャープ株式会社 | プラズマ処理装置及びプラズマ処理方法 |
JP2007025073A (ja) * | 2005-07-13 | 2007-02-01 | Sony Corp | データ伝送方法、データ送信装置及びデータ受信装置、並びにプログラム |
US7899864B2 (en) * | 2005-11-01 | 2011-03-01 | Microsoft Corporation | Multi-user terminal services accelerator |
WO2007057053A1 (en) | 2005-11-21 | 2007-05-24 | Agilent Technologies, Inc. | Conditional updating of image data in a memory buffer |
TWI349485B (en) * | 2007-06-26 | 2011-09-21 | Avermedia Tech Inc | Method and system for providing broadcast or video programs |
JP4852012B2 (ja) * | 2007-07-09 | 2012-01-11 | 株式会社東芝 | 画像を処理する装置、画像の更新を検出する方法およびプログラム |
US9184072B2 (en) | 2007-07-27 | 2015-11-10 | Mattson Technology, Inc. | Advanced multi-workpiece processing chamber |
US20090206056A1 (en) | 2008-02-14 | 2009-08-20 | Songlin Xu | Method and Apparatus for Plasma Process Performance Matching in Multiple Wafer Chambers |
US8617347B2 (en) * | 2009-08-06 | 2013-12-31 | Applied Materials, Inc. | Vacuum processing chambers incorporating a moveable flow equalizer |
-
2009
- 2009-04-23 US US12/428,971 patent/US8441494B2/en active Active
-
2010
- 2010-03-17 CA CA2697143A patent/CA2697143C/en active Active
- 2010-03-18 AU AU2010201050A patent/AU2010201050B2/en active Active
- 2010-03-28 IL IL204818A patent/IL204818A/en active IP Right Grant
- 2010-03-30 EP EP10158521.4A patent/EP2244183B1/en active Active
- 2010-04-12 RU RU2010114314/08A patent/RU2445705C2/ru active
- 2010-04-16 JP JP2010094797A patent/JP5027899B2/ja active Active
- 2010-04-21 CN CN2010101521258A patent/CN101872293B/zh active Active
- 2010-04-22 KR KR1020100037633A patent/KR101144694B1/ko active IP Right Grant
- 2010-04-23 MX MX2010004475A patent/MX2010004475A/es active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7447997B2 (en) * | 2002-05-30 | 2008-11-04 | Microsoft Corporation | Reducing information transfer in screen capture series |
KR20080018396A (ko) * | 2006-08-24 | 2008-02-28 | 한국문화콘텐츠진흥원 | 이동통신 단말기의 디스플레이 정보를 외부 디스플레이장치에서 디스플레이하기 위한 모바일 애플리케이션 및pc 애플리케이션을 기록한 컴퓨터 판독 가능 기록매체 |
Also Published As
Publication number | Publication date |
---|---|
AU2010201050A1 (en) | 2010-11-11 |
CN101872293A (zh) | 2010-10-27 |
CA2697143A1 (en) | 2010-10-23 |
CN101872293B (zh) | 2012-07-25 |
EP2244183A3 (en) | 2011-06-08 |
EP2244183A2 (en) | 2010-10-27 |
US20100271379A1 (en) | 2010-10-28 |
EP2244183B1 (en) | 2017-09-20 |
KR20100117043A (ko) | 2010-11-02 |
AU2010201050B2 (en) | 2012-03-29 |
US8441494B2 (en) | 2013-05-14 |
JP5027899B2 (ja) | 2012-09-19 |
MX2010004475A (es) | 2010-10-22 |
RU2010114314A (ru) | 2011-10-20 |
CA2697143C (en) | 2013-12-31 |
JP2010257454A (ja) | 2010-11-11 |
IL204818A (en) | 2015-07-30 |
IL204818A0 (en) | 2010-11-30 |
RU2445705C2 (ru) | 2012-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101144694B1 (ko) | 원격 디스플레이로의 전송을 위해 프레임버퍼를 복제하기 위한 방법 및 시스템 | |
US11003412B2 (en) | Method and system for identifying drawing primitives for selective transmission to a remote display | |
US20090002263A1 (en) | Providing a Composite Display | |
CN109522070B (zh) | 显示处理方法和*** | |
US10002403B2 (en) | Command remoting | |
US10733689B2 (en) | Data processing |
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 | ||
FPAY | Annual fee payment |
Payment date: 20170330 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20180328 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20190328 Year of fee payment: 8 |