Skip to content

Performance Bottleneck with complex CLA/DCXML #78

@Daedalus11069

Description

@Daedalus11069

I'm using mIRC 7.75 and dcxdll-3.1-git978 on Windows 11 Pro (22H2, OS Build 22621.2861 with Experience Pack 1000.22681.1000.0)

As I alluded to at the end of #77, following the update from 469 to 952/978(both were affected), I encountered a performance issue with larger CLA/DCXML structures.

Whenever I open up the interface I made, there's a long period of what appears to be sizing/margin/padding adjustments visually taking place before the interface eventually settles and can be interacted with. Below is a gif example:

performance issues1

Below is the test case I used to create the interface:

DCXML
<dcxml>
    <!-- margin order: -->
    <!-- LEFT TOP RIGHT BOTTOM -->
    <dialogs>
        <dialog name="interface" caption="Interface" w="1010" h="200" margin="0 0 0 0">
            <control type="tab" id="id1" styles="hot gradient">
                <control type="panel" caption="Tab 1" cascade="v">
                    <pane cascade="h">
                        <control type="panel" cascade="v" weight="4">
                            <control type="text" caption="�Title 1�" height="16" />
                            <control type="list" id="id2" styles="vsbar" margin="0 0 5 5" />
                            <control type="panel" height="60">
                                <pane cascade="h">
                                    <control type="edit" id="id3" styles="tooltips group tabstop" />
                                    <control type="edit" id="id4" styles="tooltips tabstop" />
                                </pane>
                                <pane cascade="h">
                                    <control type="edit" id="id5" weight="7" styles="tooltips tabstop" />
                                    <control type="button" id="id6" caption="Btn" weight="3" />
                                </pane>
                                <control type="button" id="id7" caption="Button" height="20" />
                            </control>
                        </control>
                        <control type="panel" cascade="v" weight="3">
                            <control type="text" caption="�Title 2�" height="16" />
                            <control type="list" id="id8" styles="vsbar" weight="5" margin="0 0 5 5" />
                            <control type="panel" height="40">
                                <pane cascade="h">
                                    <control type="edit" id="id8" weight="7" styles="tabstop autohs" />
                                    <control type="button" id="id9" caption="Btn" weight="3" />
                                </pane>
                                <control type="button" id="id10" caption="Button" height="20" />
                            </control>
                        </control>
                        <control type="panel" cascade="v" weight="5">
                            <control type="text" caption="�Title 3�" height="16" />
                            <control type="panel" cascade="h">
                                <control type="panel" cascade="v" margin="0 0 5 0">
                                    <control type="list" id="id11" styles="vsbar" weight="10" />
                                    <control type="button" id="id12" eval="1" caption="Button -- $+ $chr(62)" height="20" />
                                    <control type="text" caption="Text" styles="center" />
                                </control>
                                <control type="panel" cascade="v">
                                    <control type="list" id="id13" styles="vsbar" weight="10" />
                                    <control type="button" id="id14" eval="1" caption="$chr(60) $+ -- Btn" height="20" />
                                    <control type="text" caption="Text" styles="center" />
                                </control>
                            </control>
                        </control>
                        <control type="panel" cascade="v" weight="4">
                            <control type="panel" cascade="h">
                                <control type="panel" cascade="v">
                                    <control type="panel" cascade="v">
                                        <control type="text" caption="�Title 4�" height="16" />
                                        <control type="panel" cascade="v">
                                            <control type="radio" id="id15" caption="Radio" height="20" />
                                            <control type="radio" id="id16" caption="Radio 2" height="20" />
                                            <control type="radio" id="id17" caption="Radio 3" height="20" />
                                            <control type="radio" id="id18" caption="Radio 4" height="20" />
                                        </control>
                                    </control>
                                    <control type="panel" cascade="v">
                                        <control type="text" caption="�Title 5�" height="16" margin="0 5 5 5" />
                                        <control type="button" id="id19" caption="Load" height="20" />
                                        <control type="button" id="id20" caption="Unload" height="20" />
                                    </control>
                                </control>
                                <control type="panel" cascade="v" margin="0 0 5 0">
                                    <control type="text" caption="�Title 6�" height="16" />
                                    <control type="panel" cascade="v">
                                        <control type="text" caption="Title 7" height="16" />
                                        <control type="panel" height="40" cascade="v">
                                            <control type="radio" id="id21" eval="1" caption="$chr(9854)" styles="group" />
                                            <control type="panel" cascade="h">
                                                <control type="radio" id="id22" width="20" />
                                                <control type="edit" id="id23" width="50" />
                                            </control>
                                        </control>
                                    </control>
                                    <control type="panel" cascade="v">
                                        <control type="text" caption="Title 8" height="16" />
                                        <control type="panel" height="40" cascade="v">
                                            <control type="radio" id="id24" eval="1" caption="$chr(9854)" />
                                            <pane cascade="h">
                                                <control type="radio" id="id25" width="20" />
                                                <control type="edit" id="id26" width="50" />
                                            </pane>
                                        </control>
                                    </control>
                                </control>
                            </control>
                        </control>
                        <control type="panel" cascade="v" weight="3">
                            <control type="text" caption="�Title 9�" height="16" />
                            <control type="panel" cascade="h">
                                <control type="panel" cascade="v" margin="0 0 5 0">
                                    <control type="text" caption="Caption" styles="center" height="16" />
                                    <control type="list" id="id27" styles="hsbar" />
                                    <control type="text" caption="Caption" styles="center" height="16" />
                                    <control type="list" id="id28" styles="hsbar" />
                                </control>
                            </control>
                        </control>
                        <control type="panel" cascade="v" weight="2">
                            <control type="text" caption="�Title 10�" height="16" />
                            <control type="panel" height="27" cascade="h">
                                <control type="radio" id="id29" caption="Caption" />
                                <control type="radio" id="id30" caption="Caption" />
                            </control>
                            <control type="text" caption="�Title 11�" height="16" />
                            <control type="check" id="id31" caption="Title 12" tooltip="(tooltip content)" styles="tooltips" height="20" />
                        </control>
                    </pane>
                </control>
            </control>
        </dialog>
    </dialogs>
</dcxml>
mSL test case
dialog MainInterface {
  title "Interface"
  size 213 710 510 110
  option dbu
}

alias interfaceopen {
  clear
  if ($dialog(intf1) == $null) {
    dialog -m intf1 MainInterface
  }
  else {
    dialog -x intf1
    dialog -m intf1 MainInterface
  }
}

on *:DIALOG:intf1:init:0:{
  var %verbose = v
  dcx Mark $dname interface.events

  xdialog -b $dname +tz
  xdialog -T $dname +sp
  ;dcxml -d [DNAME] [Name of dialog element you wish to load] [path to dcxml file]
  dcxml -d $+ %verbose $dname interface $qt($mircdirscripts\interface.xml)

  .timer -d 1 0 xdialog -l $dname update
  .timer -d 1 0 xdialog -j $dname
  .timer -dm 1 500 xdock -m $dialog($dname).hwnd +b
  .timer -dm 1 500 xdock -r $dialog($dname).hwnd + 0 %h
}

alias interface.events {
  ; Nothing to do here
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions