- [NSPrintInfo PMPrintSession] и - [NSPrintInfo PMPageFormat] - PullRequest
0 голосов
/ 10 января 2019

У нас есть несколько пользователей, сообщающих о странных замедлениях в нашем приложении, которые, как показывает профилирование, имеют значения -[NSPrintInfo PMPrintSession] и -[NSPrintInfo PMPageFormat]. Трассировка стека обычно выглядит так:

43  SysPrintS::GetPageFormat() + 48 (Printing.c:4571,34 in MyAppName + 742096) [0x1014732d0] 1-43
 43  -[NSPrintInfo(NSInternal) _pageFormatForGetting] + 27 (AppKit + 3849439) [0x7fff37ac2cdf] 1-43
    43  -[NSPrintInfo(NSInternal) _createDefaultOrUnflattenPageFormatIfNecessary] + 211 (AppKit + 3849789) [0x7fff37ac2e3d] 1-43
      43  PMSessionDefaultPageFormat + 66 (PrintCore + 9872) [0x7fff389fb690] 1-43
        43  OpaquePMPageFormat::PJCDefaultPageFormat(OpaquePMPrintSession*) + 71 (PrintCore + 10197) [0x7fff389fb7d5] 1-43
          43  copyPrintingPref(__CFString const*, int, __CFString const*, unsigned long) + 165 (PrintCore + 12409) [0x7fff389fc079] 1-43
            43  printToolAgent + 315 (PrintCore + 8616) [0x7fff389fb1a8] 1-43
              43  _dispatch_semaphore_wait_slow + 58 (libdispatch.dylib + 19229) [0x7fff673d5b1d] 1-43
                43  semaphore_timedwait_trap + 10 (libsystem_kernel.dylib + 4558) [0x7fff6755c1ce] 1-43
                 *43  semaphore_wait_continue + 0 (kernel + 1925472) [0xffffff80003d6160] 1-43

Некоторые пользователи никогда не видят этого замедления. Некоторые видят это для 10% документов, которые они открывают. Один пользователь видит это для 50% документов, которые он открывает. Зависания часто длятся 20-60 секунд. Уязвимые пользователи находятся в разных местах с выбранными принтерами по умолчанию. Код, который вызывает зависание, настолько прост, насколько можно представить, эффективно:

NSPrintInfo *info = [[NSPrintInfo alloc] init];
PMPrintSession session = (PMPrintSession)info.PMPrintSession;

Может кто-нибудь придумать причину, почему PrintCore так долго возвращался? Есть ли способ избежать этого? Я никогда не видел эту проблему в любом другом приложении.

...