mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
039592f4d8
This lifts a bunch of string conversions higher up the stack, but allows us to make the servo code use utf-8 unconditionally, and seemed faster in my benchmarking (see comment 0). It should also make a bunch of attribute setters faster too (like setting .cssText), now that we use UTF8String for them (we couldn't because we couldn't specify different string types for the getter and setters). Differential Revision: https://phabricator.services.mozilla.com/D99590
103 lines
3.7 KiB
C++
103 lines
3.7 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* FFI functions for Gecko to call into Servo */
|
|
|
|
#ifndef mozilla_ServoBindings_h
|
|
#define mozilla_ServoBindings_h
|
|
|
|
#include "mozilla/ServoStyleConsts.h"
|
|
|
|
// These functions are defined via macros in Rust, so cbindgen doesn't see them.
|
|
|
|
namespace mozilla {
|
|
|
|
// The clang we use on windows complains about returning StyleStrong<> and
|
|
// StyleOwned<>, since the template parameters are incomplete.
|
|
//
|
|
// But they only contain pointers so it is ok. Also, this warning hilariously
|
|
// doesn't exist in GCC.
|
|
//
|
|
// A solution for this is to explicitly instantiate the template, but duplicate
|
|
// instantiations are an error.
|
|
//
|
|
// https://github.com/eqrion/cbindgen/issues/402 tracks an improvement to
|
|
// cbindgen that would allow it to autogenerate the template instantiations on
|
|
// its own.
|
|
#pragma GCC diagnostic push
|
|
#ifdef __clang__
|
|
# pragma GCC diagnostic ignored "-Wreturn-type-c-linkage"
|
|
#endif
|
|
|
|
extern "C" {
|
|
|
|
#define BASIC_RULE_FUNCS_WITHOUT_GETTER(type_) \
|
|
void Servo_##type_##_Debug(const RawServo##type_*, nsACString* result); \
|
|
void Servo_##type_##_GetCssText(const RawServo##type_*, nsACString* result);
|
|
|
|
#define BASIC_RULE_FUNCS(type_) \
|
|
StyleStrong<RawServo##type_##Rule> Servo_CssRules_Get##type_##RuleAt( \
|
|
const ServoCssRules* rules, uint32_t index, uint32_t* line, \
|
|
uint32_t* column); \
|
|
void Servo_StyleSet_##type_##RuleChanged( \
|
|
const RawServoStyleSet*, const RawServo##type_##Rule*, \
|
|
const StyleDomStyleSheet*, StyleRuleChangeKind); \
|
|
BASIC_RULE_FUNCS_WITHOUT_GETTER(type_##Rule)
|
|
|
|
#define GROUP_RULE_FUNCS(type_) \
|
|
BASIC_RULE_FUNCS(type_) \
|
|
StyleStrong<ServoCssRules> Servo_##type_##Rule_GetRules( \
|
|
const RawServo##type_##Rule* rule);
|
|
|
|
BASIC_RULE_FUNCS(Style)
|
|
BASIC_RULE_FUNCS(Import)
|
|
BASIC_RULE_FUNCS_WITHOUT_GETTER(Keyframe)
|
|
BASIC_RULE_FUNCS(Keyframes)
|
|
GROUP_RULE_FUNCS(Media)
|
|
GROUP_RULE_FUNCS(MozDocument)
|
|
BASIC_RULE_FUNCS(Namespace)
|
|
BASIC_RULE_FUNCS(Page)
|
|
GROUP_RULE_FUNCS(Supports)
|
|
BASIC_RULE_FUNCS(FontFeatureValues)
|
|
BASIC_RULE_FUNCS(FontFace)
|
|
BASIC_RULE_FUNCS(CounterStyle)
|
|
|
|
#undef GROUP_RULE_FUNCS
|
|
#undef BASIC_RULE_FUNCS
|
|
#undef BASIC_RULE_FUNCS_WITHOUT_GETTER
|
|
|
|
#define BASIC_SERDE_FUNCS(type_) \
|
|
bool Servo_##type_##_Deserialize(mozilla::ipc::ByteBuf* input, type_* v); \
|
|
bool Servo_##type_##_Serialize(const type_* v, mozilla::ipc::ByteBuf* output);
|
|
|
|
using RayFunction = StyleRayFunction<StyleAngle>;
|
|
BASIC_SERDE_FUNCS(LengthPercentage)
|
|
BASIC_SERDE_FUNCS(StyleRotate)
|
|
BASIC_SERDE_FUNCS(StyleScale)
|
|
BASIC_SERDE_FUNCS(StyleTranslate)
|
|
BASIC_SERDE_FUNCS(StyleTransform)
|
|
BASIC_SERDE_FUNCS(StyleOffsetPath)
|
|
BASIC_SERDE_FUNCS(StyleOffsetRotate)
|
|
BASIC_SERDE_FUNCS(StylePositionOrAuto)
|
|
|
|
#undef BASIC_SERDE_FUNCS
|
|
|
|
void Servo_CounterStyleRule_GetDescriptorCssText(
|
|
const RawServoCounterStyleRule* rule, nsCSSCounterDesc desc,
|
|
nsACString* result);
|
|
|
|
bool Servo_CounterStyleRule_SetDescriptor(const RawServoCounterStyleRule* rule,
|
|
nsCSSCounterDesc desc,
|
|
const nsACString* value);
|
|
|
|
} // extern "C"
|
|
|
|
#pragma GCC diagnostic pop
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_ServoBindings_h
|