Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс апр 30, 2017 6:18 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 14 сообщений ] 
Автор Сообщение
СообщениеДобавлено: Вс мар 23, 2014 10:07 am 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Вопрос, что лежит конкретно в [CURRENT_TASK]? Понимаю что это текущий процесс, но как устроен этот dd
Код:
OS_BASE             equ 0x80000000
window_data         equ (OS_BASE+0x0001000)
CURRENT_TASK        equ (OS_BASE+0x0003000)

window._.sys_set_window
Код:
        mov     eax, [CURRENT_TASK]               ; грузим значение текущего процесса
        shl     eax, 5                            ; зачем сдвиг при этом еще и на 5 ?
        add     eax, window_data                  ; прибавляем указатель на данные

Вероятно так мы добираемся до WDATA, но почему сдвиг на 5 и зачем. Где посмотреть, что пишется в CURRENT_TASK?


Вернуться к началу
СообщениеДобавлено: Вс мар 23, 2014 12:30 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
это номер слота активного потока.


Вернуться к началу
СообщениеДобавлено: Вс мар 23, 2014 12:42 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Serge писал(а):
это номер слота активного потока.
это сам CURRENT_TASK
а сдвиг для чего?


Вернуться к началу
СообщениеДобавлено: Вс мар 23, 2014 1:53 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
в структуре window_data на каждый слот отводится 32 байта.
сдвиг влево на 5 - это фактически умножение номера слота на 32.

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Вернуться к началу
СообщениеДобавлено: Вс мар 23, 2014 2:11 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
art_zh писал(а):
в структуре window_data на каждый слот отводится 32 байта.
сдвиг влево на 5 - это фактически умножение номера слота на 32.

art_zh, Serge спасибо, теперь дошло!


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 5:02 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 5:27 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Akyltist писал(а):
Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???

Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 5:45 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Mario_r4 писал(а):
Akyltist писал(а):
Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???

Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.

системный фон по тому же принципу?


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 6:13 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Akyltist писал(а):
Mario_r4 писал(а):
Akyltist писал(а):
Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???

Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.

системный фон по тому же принципу?

Есть только одни фон - фон рабочего стола.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 6:27 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Mario_r4 писал(а):
Есть только одни фон - фон рабочего стола.

который тоже перерисовывается полностью если его коснулись изменения?


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 9:07 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Akyltist писал(а):
Mario_r4 писал(а):
Есть только одни фон - фон рабочего стола.

который тоже перерисовывается полностью если его коснулись изменения?

Нет, я же написал:
Цитата:
а код перерисовки фона выводит тот участок, который надо восстановить

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
СообщениеДобавлено: Пн мар 31, 2014 9:49 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Mario_r4 спасибо!


Вернуться к началу
СообщениеДобавлено: Вс май 25, 2014 2:38 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Вопрос такой, можно ли срезать вот такой код:
Код:
align 4
;------------------------------------------------------------------------------
sys_button_activate_handler: ;/////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
;> eax = pack[8(process slot), 24(button id)]
;> ebx = pack[16(button x coord), 16(button y coord)]
;> cl = mouse button mask this system button was pressed with
;------------------------------------------------------------------------------
        call    button._.find_button
        or      eax, eax
        jz      .exit

        mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
        call    button._.negative_button

  .exit:
        ret

align 4
;------------------------------------------------------------------------------
sys_button_deactivate_handler: ;///////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
;> eax = pack[8(process slot), 24(button id)]
;> ebx = pack[16(button x coord), 16(button y coord)]
;> cl = mouse button mask this system button was pressed with
;------------------------------------------------------------------------------
        call    button._.find_button
        or      eax, eax
        jz      .exit

        mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
        call    button._.negative_button

  .exit:
        ret

До:
Код:
align 4
;------------------------------------------------------------------------------
sys_button_activate_handler: ;/////////////////////////////////////////////////
;------------------------------------------------------------------------------
;> eax = pack[8(process slot), 24(button id)]
;> ebx = pack[16(button x coord), 16(button y coord)]
;> cl = mouse button mask this system button was pressed with
;------------------------------------------------------------------------------

align 4 ; тоже вроде ни к чему
;------------------------------------------------------------------------------
sys_button_deactivate_handler: ;///////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
;> eax = pack[8(process slot), 24(button id)]
;> ebx = pack[16(button x coord), 16(button y coord)]
;> cl = mouse button mask this system button was pressed with
;------------------------------------------------------------------------------
        call    button._.find_button
        or      eax, eax
        jz      .exit

        mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
        call    button._.negative_button

  .exit:
        ret

или не стоит?
PS: код из (root)/kernel/trunk/gui/button.inc


Вернуться к началу
СообщениеДобавлено: Вс май 25, 2014 7:51 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Akyltist писал(а):
или не стоит?
PS: код из (root)/kernel/trunk/gui/button.inc

Не стоит. Рекомендую самому подумать почему не стоит, раз уж возникла идея такой копеечной оптимизации.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 14 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB